Невозможно проанализировать вложенный JSON в ответе AJAX - PullRequest
0 голосов
/ 29 октября 2019

Я написал код в jQuery / AJAX, чтобы запросить Elasticsearch и вернуть список документов на основе критериев поиска. Я могу получить документы от Elasticsearch. Я пытаюсь разобрать документы и отобразить их на веб-странице. Вот ответ из индекса Elasticsearch.

   {
  "took": 12,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 4,
      "relation": "eq"
    },
    "max_score": 1.617034,
    "hits": [
      {
        "_index": "test",
        "_type": "_doc",
        "_id": "uhp0sW0BO2MOKYEQa-CB",
        "_score": 1.617034,
        "_source": {
          "MsgTime": "2019-10-09T16:57:39.829Z",
          "OrganizationID": "nasa",
          "UserID": "USER1",
          "TravelID": "1234",
          "MachineID": "9099",
          "Stage": "ingested"
        }
      },
      {
        "_index": "test",
        "_type": "_doc",
        "_id": "sxpnsW0BO2MOKYEQ9eAo",
        "_score": 1.617034,
        "_source": {
          "MsgTime": "2019-10-09T16:44:03.102Z",
          "OrganizationID": "nasa",
          "UserID": "USER1",
          "TravelID": "201710283fc113afa731459285b55d94bb8ddf02",
          "MachineID": "9099",
          "Stage": "processed"
        }
      }
    ]
  }
}

Вывод, который я пытаюсь получить на веб-странице, выглядит следующим образом для каждого элемента "_source" в разделе "совпадения". Везде, где это применимо, значения будут отличаться.

          "MsgTime": "2019-10-09T16:57:39.829Z",
          "OrganizationID": "nasa",
          "UserID": "USER1",
          "TravelID": "1234",
          "MachineID": "9099",
          "Stage": "ingested"

Я попытался проанализировать вывод как ответ AJAX в jQuery, используя следующий код (только часть анализа)

     $(document).ready(function() {
            $("#search").click(function() {
                var textboxvalue = $("#trip_id").val();                            
                    $.ajax({
                        url: myURL,
                        type: "GET",
                        dataType: 'json',
                        data: query = {
                                q: "TravelID: " +textboxvalue,
                                pretty:'true',
                                size:100
                        },
                        success: function( result ) { 

                            $.each( result, function( key, value ) {
                                $.each(value,function(hits,v){
                                    $.each(v,function(i,hits){
                                        $.each(hits,function(_source,v){
                                            console.log(_source,v);
                                        });
                                    });
                                });
                            });

В процессе анализачасть, я не могу получить окончательный вывод. Я не уверен, что мой последний цикл $ .each правильный.

Я могу предоставить больше информации, если это необходимо. Я исключил HTML здесь.

Заранее спасибо, Ник

1 Ответ

1 голос
/ 29 октября 2019

Я извлек ваше заявление о разборе. Его можно существенно сократить до следующего:

obj =
{ "took": 12, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 4, "relation": "eq" }, "max_score": 1.617034, "hits": [ { "_index": "test", "_type": "_doc", "_id": "uhp0sW0BO2MOKYEQa-CB", "_score": 1.617034, "_source": { "MsgTime": "2019-10-09T16:57:39.829Z", "OrganizationID": "nasa", "UserID": "USER1", "TravelID": "1234", "MachineID": "9099", "Stage": "ingested" } }, { "_index": "test", "_type": "_doc", "_id": "sxpnsW0BO2MOKYEQ9eAo", "_score": 1.617034, "_source": { "MsgTime": "2019-10-09T16:44:03.102Z", "OrganizationID": "nasa", "UserID": "USER1", "TravelID": "201710283fc113afa731459285b55d94bb8ddf02", "MachineID": "9099", "Stage": "processed" } } ] } }

console.log(obj.hits.hits.map(v=>v._source))

В вашем объекте JavaScript у вас есть объект hits, к которому вы можете обращаться напрямую, и у вас есть массив hits, к которому вы также можете обращаться напрямую. Чтобы получить содержимое содержащегося объекта с атрибутом _source, вам нужно использовать циклическую технику, например .map(), показанную выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...