2016-05-23 4 views
0

Я использую узел версии 6.0.0. Я хочу проанализировать строку JSON для объекта JSON. Строка содержит массив объектов.Невозможно проанализировать массив в JSON.parse в узле

Но JSON.parse не преобразовывает любые типы массивов вообще. Он возвращает пустой массив для всех массивов независимо от их содержимого.

EDIT: Это не просто проблема с консолью. Я сохраняю эти проанализированные данные в своей базе данных. И там также я вижу пустой массив. Никакие волшебные трюки, идущие на консоли.

UPDATE: Некоторые внешние коды нарушили определение массива. Все определения массивов теперь заканчиваются пустым массивом. Отладка причины, спасибо за все ответы.

Примеры:

contacts = '{"data": [{"p": "", "e": "", "n": "Veera Sundar"}]}' // This is my example JSON String. Rest are hit and trials. 
> JSON.parse(contacts) 
{ data: [] } 
> a = '{"data": [{"p": ""}]}' 
'{"data": [{"p": ""}]}' 
> JSON.parse(a) 
{ data: [] } 
> a = '{"data": [1,2,3]}' 
'{"data": [1,2,3]}' 
> JSON.parse(a) 
{ data: [] } 
> a = '{"d": [1,2,3]}' 
'{"d": [1,2,3]}' 
> JSON.parse(a) 
{ d: [] } 
> a = '{"d": {"c":1}}' 
'{"d": {"c":1}}' 
> JSON.parse(a) 
{ d: { c: 1 } } // Works for objects 
> a = '{"d": {"c":[1]}}' 
'{"d": {"c":[1]}}' 
> JSON.parse(a) 
{ d: { c: [] } } 
> a = '{"d": {"c":["b","e"]}}' 
'{"d": {"c":["b","e"]}}' 
> JSON.parse(a) 
{ d: { c: [] } } 
> a = '{"d": {"c":[{"b":1}]}}' 
'{"d": {"c":[{"b":1}]}}' 
> JSON.parse(a) 
{ d: { c: [] } } 
> a = '{"d": {"c":["undefined"]}}' 
'{"d": {"c":["undefined"]}}' 
> JSON.parse(a) 
{ d: { c: [] } }` 

Не удалось за все остальное !!

Пожалуйста, дайте мне знать, что я делаю неправильно. Все эти примеры работают на обычной консоли, например: консоль Chrome.

+1

Возможно, вы неправильно интерпретируете вывод консоли. Вы видите, что массив в '{data: []}' гиперссылках в консоли? Щелкните его, чтобы открыть его содержимое .... Не вводите в заблуждение, чтобы думать, что массив пуст. – trincot

+1

Я просто запустил ваш код, ничего не получилось, trincot прав, возможно, это просто показывает вам вводящее в заблуждение приглашение. Вот мои результаты: > contacts = '{"data": [{"p": "", "e": "", "n": "Veera Sundar"}]}' '{"data": [ {"p": "", "e": "", "n": "Veera Sundar"}]} ' > JSON.parse (контакты) {данные: [{p:' ', e:' ' , n: 'Veera Sundar'}]} > a = '{"data": [{"p": ""}]}' '{"data": [{"p": ""}]} ' > JSON.parse (a) {data: [{p:' '}]} – akazemis

+0

Насколько я понимаю, хром-консоль показывает полный массив, но repl не делает этого. Я проверил осмотр, и это действительно показывает значение, но это bizzare:> util.inspect (JSON.parse (контакты)) '{data: [{p: \' \ ', e: \' \ ' , п: \ 'вира Сундара \'}]}» > JSON.parse (контакты) {данные: []} > а = JSON.parse (контакты) {данные: []} > util.inspect (a) '{data: [{p: \' \ ', e: \' \ ', n: \' Veera Sundar \ '}]}' –

ответ

0

Обнаружено, что это была ошибка в Node v6.0.0, где заполненный массив был представлен как пустой массив. Отправлено this issue на git. Однако это было решено на версии 6.2.0.

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