2016-05-31 2 views
0

Я запускаю сервер node.js, который отправляет запросы в экземпляр elasticsearch. Вот пример JSON, возвращаемый запросом:elasticsearch autosuggest возвращающийся сложный JSON

{ 
    "took": 2, 
    "timed_out": false, 
    "_shards": { 
     "total": 5, 
     "successful": 5, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 9290, 
     "max_score": 0, 
     "hits": [] 
    }, 
    "suggest": { 
     "postSuggest": [ 
      { 
       "text": "a", 
       "offset": 0, 
       "length": 1, 
       "options": [ 
        { 
         "text": "Academic Librarian", 
         "score": 2 
        }, 
        { 
         "text": "Able Seamen", 
         "score": 1 
        }, 
        { 
         "text": "Academic Dean", 
         "score": 1 
        }, 
        { 
         "text": "Academic Deans-Registrar", 
         "score": 1 
        }, 
        { 
         "text": "Accessory Designer", 
         "score": 1 
        } 
       ] 
      } 
     ] 
    } 
} 

Мне нужно создать массив, содержащий каждую должность в виде строки. Я столкнулся с этим странным поведением, которое я не могу понять. Всякий раз, когда я пытаюсь вытащить значения из JSON, я не могу пойти ниже options, или все возвращается как неопределенное.

Например:

arr.push(results.suggest.postSuggest) будет толкать только то, что можно было ожидать: все вещи внутри postSuggest.

arr.push(results.suggest.postSuggest.options) будет отображаться как неопределенный, хотя я могу видеть его, когда я запускаю его без .options. Это справедливо и для всего, что находится ниже .options.

Я думаю, что это может быть потому, что .options является своего рода встроенной функции, которая действует на переменных, поэтому вместо того, чтобы видеть варианты, как JSON и вместо того, чтобы пытаться запустить функцию results.suggest.postSuggest

+2

'postSuggest' является массивом (скобки,' [ ..] '), содержащий объект (фигурные скобки,' {..} '). Сначала вам нужно получить доступ к индексу массива - 'postSuggest [0] .options'. - [Доступ/процесс (вложенные) объекты, массивы или JSON] (https://stackoverflow.com/questions/11922383/access-process-nested-objects-arrays-or-json) –

+0

Исправлена ​​проблема, спасибо. Я никогда не регистрировал, что это массив. – IanCZane

ответ

1

arr.push (results.suggest.postSuggest.options)

postSuggest - это массив объектов. options внутри postSuggest также массив объекта. Итак, сначала вы должны получить postSuggest от postSuggest[0], а затем postSuggest[0].options, чтобы получить массив options

Это ниже фрагмент кода может быть usefule

var myObj = {..} 
// used jquery just to demonstrate postSuggest is an Array 
console.log($.isArray(myObj.suggest.postSuggest)) //return true 
var getPostSuggest =myObj.suggest.postSuggest //Array of object 
var getOptions = getPostSuggest[0].options; // 0 since it contain only one element 
console.log(getOptions.length) ; // 5 , contain 5 objects 
getOptions.forEach(function(item){ 
    document.write("<pre>Score is "+ item.score + " Text</pre>") 
}) 

Jsfiddle

Смежные вопросы