Разбор строки JSON в массив, а не объект - PullRequest
5 голосов
/ 17 августа 2011

У меня есть массив PHP, и я передаю его в javascript с кодировкой json, мне нужно сделать это таким образом, потому что он будет очень динамичным. Это код эха:

{"notempty":true}

И я использую это, чтобы преобразовать его в JavaScript:

var myarray = eval('(' + json + ')');

По какой-то причине он создает объект вместо массива, и по этой причине я не могу использовать .length или цикл for.

Кто-то знает, что я здесь не так делаю?

Спасибо

Ответы [ 4 ]

5 голосов
/ 17 августа 2011

Вы пытаетесь трактовать Object как Array, а Object - это не Array, это Object.

Каждый раз, когда вы видите {} в JSON, это означает «То, что содержится в этих священных скобках, является динамическим объектом». Когда вы видите [], это означает «вот! Я массив» (из этого исключения есть заметные исключения: jQuery выполняет некоторую специальную работу, чтобы выглядеть как массив).

Итак, чтобы перебрать Object, вам нужно использовать for... in.

// eval BAD unless you know your input has been sanitized!.
var myObj = JSON.parse('{"notempty":true}');
// personally, I use it in for... in loops. It clarifies that this is a string
// you may want to use hasOwnProperty here as sometimes other "keys" are inserted
for( var it in myObj ) console.log( "myObj["+it+"] = " + myObj[it] );
1 голос
/ 17 августа 2011

По умолчанию, если вы используете кодирование массива assoc в php, он станет объектом js при декодировании.Чтобы это был массив, вам нужно сделать его массивом в php:

PHP:

$arr = "['notempty','notempty2','notempty3']";

В противном случае вы должны преобразовать его в массив в JS, но этоМне кажется, это пустая трата времени, поскольку циклически проходить по объекту в javascript намного проще:

Javascript:

var arr = new Array();
for(var i in obj) arr[i] = obj[i];
1 голос
/ 17 августа 2011

{} - это объект, который содержит один атрибут с именем notempty.Если вам нужен массив, он должен быть

[{"notempty":true}]

, который представляет собой массив с единственным элементом с индексом 0, который является объектом с единственным атрибутом 'notempty';.

0 голосов
/ 17 августа 2011

Вы можете использовать jQuery, чтобы разобрать его в массив следующим образом:

var p = [];
$.each(jsonData, function (key, val) {
    p.push([val.propertyOne, val.propertyTwo]);
});

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...