JSON.stringify return []

Зачем возвращать JSON.stringify():

[]

То же самое происходит с jQuery: $.JSON.encode()

Что может быть причиной этого? Я передаю простой массив объектов, где каждый объект имеет свойства строки. Я зациклился и предупредил о свойствах каждого объекта, и все выглядит нормально, но по какой-то причине оба метода кодирования возвращают [].

Ответ 1

В объявлении массива

var count_review= new Array() 

вместо этого используйте

var count_review={}; 

Это работает!

Ответ 2

если ваш массив объявляет как значение "String" возвращает значение null

var array = [];
array['name'] = 'johan';
array['age'] = 20;
alert(JSON.stringify(array))// return []

но если массив объявляет как "int" возвращает строку json

var array = [];
array[0] = 'johan';
array[1] = 20;
alert(JSON.stringify(array))// return["johan",20]

Ответ 3

В то время как ответы выше верны, чтобы полностью понять, что это определенно нуждается в большем контексте.

JSON - это универсальный формат (в смысле поддержки нескольких, надеюсь, всех языков программирования), который не является полностью отображением объектов JavaScript на 1-к-1.

Итак, основная причина, почему это происходит, заключается в том, что в JSON (как указано RFC 7159) в JavaScript нет ассоциативных массивов Array sense - т.е. массивы, ключи которых являются строками. Поскольку чтение RFC-спецификаций может быть довольно трудоемким, его можно легко увидеть поверх JSON.org, где он говорит (некоторые акцент ниже мой):

JSON построен на двух структурах:

  • Коллекция пар имя/значение. На разных языках это реализуется как объект, запись, структура, словарь, хэш-таблица, список клавиш или ассоциативный массив.
  • Упорядоченный список значений. В большинстве языков это реализуется как массив , вектор, список или последовательность.

Это универсальные структуры данных. Практически все современные языки программирования поддерживают их в той или иной форме. Имеет смысл, что формат данных, который является взаимозаменяемым с языками программирования, также основывается на этих структурах.

В JSON они принимают следующие формы:

Объектом является неупорядоченный набор пар имя/значение. Объект начинается с { (левая скобка) и заканчивается на } (правая фигурная скобка). За каждым именем следует : (двоеточие), а пары имя/значение разделяются символом , (запятая).

JSON Object definition graph

Массив - это упорядоченный набор значений. Массив начинается с [ (левая скобка) и заканчивается на ] (правая скобка). Значения разделяются символом , (запятая).

JSON Array definition graph

Функция JSON.stringify обрабатывает это таким образом, что предполагается, что массив предназначен для массива, а все ключевые записи являются аннотативными, так же, как и элементы, являющиеся объектами функций, они просто выкидываются из представления JSON. возвращается. К сожалению, это поведение не задокументировано четко и легко понятным образом в неофициальной ссылке JavaScript, которая MDN на сегодняшний день (2017-09- 04), так что вот некоторые низко висящие фрукты, если вы хотите помочь ol 'Mozilla.