Как разобрать несколько массивов JSON с помощью JSON.parse()?

Я получаю записи из базы данных и создаю массив для каждой строки и кодирую его с помощью json_encode(). Теперь мои данные возвращаются следующим образом: [{"slug":"bitcoin","change7d":"-3.87"}][{"slug":"maker","change7d":"-8.58"}].

Когда я пытаюсь проанализировать данные при вызове ajax, console.info() возвращает ошибку SyntaxError: Unexpected token [ in JSON at position 39. Вот мой код:

в моем файле php:

    foreach($result as $row){
        $data[] = $row;

    }
    print json_encode($data);

в моем js-файле:

    var newData = JSON.parse(result);

Если я немного изменю свой запрос и получу одну запись, то у меня не возникнет проблем с анализом данных.

Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
0
700
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

JSON.parse анализирует один допустимый объект JS (структуру { } или массив). Итак, решение в вашем случае либо извлекает массив за массивом из базы данных и анализирует их один за другим, либо пытается преобразовать их в один большой массив массивов на текстовом уровне, который вы получаете из базы данных. Для этого вам нужно заключить массивы в квадратные скобки и поставить между ними запятые.

В вашем случае это будет выглядеть так:

  [
    [{"slug":"bitcoin","change7d":"-3.87"}],
    [{"slug":"maker","change7d":"-8.58"}]
  ]

JSON, который вы анализируете, недействителен. Вы должны вернуть один массив объектов для правильного анализа данных вместо двух массивов. Е.НБСП666г.:

[{"slug":"bitcoin","change7d":"-3.87"},{"slug":"maker","change7d":"-8.58"}]

Вы должны создать один массив, содержащий записи, попробуйте просто

print json_encode($result)

в вашем файле PHP

Ответ принят как подходящий

После долгих исследований мне удалось решить проблему, просто сделав это:

var old = JSON.stringify(result).replace(/\]\[/g, ",");
var newData = JSON.parse(old);

console.info(newData);

Он заменяет все вхождения '][' на '', следовательно, данные ответа преобразуются в допустимый JSON.

и это дает ожидаемый результат.

Другие вопросы по теме