Я использую .getJSON для извлечения данных в график. По какой-то причине, когда я пытаюсь пройти через массив JSON, он дает мне каждый отдельный символ, как будто он не видит его как массив, но когда я выгружаю данные на консоль, он правильно отформатирован в JSON.
<!DOCTYPE html>
<html>
<head>
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$.getJSON("/getgraphdata", function(result) {
console.info(result.length);
testFunction(result);
});
</script>
</head>
<body>
<script>
function testFunction(data) {
console.info(data); // line 16
//console.info(data.length); Gives total character count.
for(var i = 0; i < data.length; i++) {
var obj = data[i];
//console.info(obj.id);
}
}
</script>
</body>
</html>
Вот данные прямо из консоли. (из строки 16)
[{"id":"1375857","temperature":"78.98","humidity":"90.2","nodeName":"Bsmt_Front","timestamp":"1536424185"},{"id":"1375856","temperature":"78.98","humidity":"77.1","nodeName":"Bsmt_Back","timestamp":"1536424185"},{"id":"1375855","temperature":"77.54","humidity":"49.9","nodeName":"Living_Room","timestamp":"1536424180"},{"id":"1375854","temperature":"0","humidity":"0","nodeName":"Bsmt_Room","timestamp":"1536424179"},{"id":"1375853","temperature":"79.52","humidity":"82.7","nodeName":"Flow_Tent","timestamp":"1536424158"}]
Я использовал здесь самый высокий рейтинг Цикл JavaScript через массив json?
Если я закомментирую строку 21, она покажет undefined. Если я делаю console.info (obj), он перебирает каждый символ в массиве.
Все указывает на то, что это не массив, но [] есть.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


вы можете использовать JSON.parse для синтаксического анализа строки в объект javascript
так что внутри вашего testFunction вы должны сделать
data = JSON.parse(data)
из-за проблемы кажется, что данные находятся в строковом формате, и, следовательно, вам нужно их проанализировать
Как Александр уже написал. jQuery автоматически проанализирует ответ, если возвращаемый тип содержимого указывает, что ответ является JSON. Если jQuery не анализирует ответ, значит, вы отправляете неправильный тип содержимого.
Похоже, ваш data содержит строку json вместо массива. Как описано выше, вы можете использовать JSON.parse для его анализа. Но похоже, что ваш ответ API имеет недопустимый тип содержимого, и поэтому getJSON не анализирует ответ сам по себе.
Спасибо. API не возвращал правильно закодированную информацию, даже если выглядел правильно. Как только это было исправлено, в инструкции синтаксического анализа не было необходимости.
Ой. Так что я не был на 100% правильным, говоря о типе контента. Не могли бы вы подробнее описать неверную кодировку? Мне любопытно, что именно было не так.
Это работает. Зачем это нужно, если он уже в формате JSON?