2016-01-11 2 views
0

Я пытаюсь разобрать JSON с помощью Javascript, но имею проблемы с доступом к значению, которое является частью 568 на первом объекте PWER (это значение меняется, и я просто хочу отобразить его на странице). '1452520496000' часть также изменение значение на основе времени. Я новичок в javascript и JSON, примеры, которые я видел в исследованиях, как правило, проще, чем такие, как доступ к PWER в «cid»: «PWER», который я могу сделать.Доступ к сильно вложенному массиву при разборе JSON в Javascript

Вот пример вывода JSON из API:

[ 
{"cid":"PWER", 
"data":[{"1452520496000":568}], 
"sid":"144", 
"units":"kWm", 
"age":5 
}, 

{"cid":"MOTN", 
"data":[{"1452520489000":0}], 
"sid":"910", 
"units":"S", 
"age":12 
}, 

{"cid":"LGHT", 
"data":[{"1452520489000":19.09}], 
"sid":"910", 
"units":"L", 
"age":12} 
] 

Я адаптировал код из примера here как скелет для запроса HTTP GET в то время как я работаю, как разобрать это. Это то, что я до сих пор:

<div id="main"></div> 

    <script> 
    var xmlhttp = new XMLHttpRequest(); 
    var url = "URLGoesHere"; 

    xmlhttp.onreadystatechange=function() { 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
      myFunction(xmlhttp.responseText); 
     } 
    } 
    xmlhttp.open("GET", url, true); 
    xmlhttp.send(); 

    function myFunction(response) { 
     var arr = JSON.parse(response); 

     var out = arr[0].data[0]; 

     document.getElementById("main").innerHTML = out; 
    } 
    </script> 

Вопрос заключается в том, что это просто выводит [объект Object] на моей странице.

Я пытался использовать консоль для отладки это:

console.log(arr[0]); 

Object {CID: "", силовые данные: Массив 1, с.и.д.: "144", единицы: "KWM" , возраст: 5}

Это показывает, что он управляет доступом к API с использованием данных токена и выталкивания.

Я хочу, чтобы получить доступ к 'Array1' в 'данных' поэтому я проверяю, что содержит:

console.log(arr[0].data); 

[Object]
0: Объект
длина: 1
__ прото __: Array [0]

Далее я пытаюсь получить доступ к объекту, который 0 в индексе:

console.log(arr[0].data[0]); 

Объект {1452520496000: 568}

значение 568, что я хочу есть, но я не могу получить доступ к нему, то 1452520496000 часть навсегда меняется. Как будет лучший способ получить доступ к этому?

ответ

0

Таким образом, вы должны использовать Object.keys(object), чтобы получить ключ вы после

var data = arr[0].data[0]; 
var keys = Object.keys(data); 
console.log(keys[0], data[keys[0]]); 
0
var obj = arr[0].data[0]; 

console.log(obj[ Object.keys(obj)[ 0 ] ]); 

получить все ключи внутри obj используя Object.keys() в массив, а затем получить первый индекс (первый ключ имя) от него.

0

JSON работает над ключевой формулой пары значений. Объект, который вы используете, не соответствует формату JSON.

"data":[{"1452520496000":568}], 

Вы можете использовать выше данных, как показано ниже двух форматов:

  1. Использование как в массиве "data":[ "1452520496000", "568"],
  2. Используйте некоторые клавиши "data":{"key1":"1452520496000", "key2" : "568"},

, и если вы хотите использовать один и тот же формат затем я нашел способ разобрать ваш JSON

var d= 'your json'; 
var parsedObjects = $.parseJSON(JSON.stringify(d)); 

Стриптизируйте json, а затем проанализируйте.

0

epascarello имеет хороший ответ. Альтернативой было бы сделать простой цикл через POJO в «данных». Простое, например, петли (хотя вы можете использовать другие, более производительные петли):

var data = arr[0].data[0]; 
var out; 
for (var key in data) { 
    out = data[key]; 
} 

Обратите внимание, что если есть другие ключи, присутствующие в этом объекте «данные», вы должны добавить проверку некоторых ошибок перед назначением ' вне'. Например. если у вас есть это:

{ 
    ... 
    data: [{ "foo": "someval", "1452520496000": 568, "bar": "someotherval" }] 

... Затем вам нужно будет сделать некоторые проверки внутри цикла, чтобы проверить текущий ключ является правильным. Я также сломаю, как только вы найдете правильный ключ, для perf.

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