将JSON字符串解析为数组,而不是对象

时间:2011-08-17 16:31:47

标签: php javascript arrays json object

我有一个PHP数组并使用json编码将其回显到javascript中,我需要这样做,因为它会非常动态。这是它回应的代码:

{"notempty":true}

我使用它,将其转换为javascript:

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

由于某种原因,它创建了一个对象而不是一个数组,因此我不能使用.length或for循环。

有人知道我在这里做错了吗?

由于

4 个答案:

答案 0 :(得分:5)

您尝试将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 :(得分:1)

{}是一个对象,其中包含一个名为notempty的属性。如果你想要一个数组,它必须是

[{"notempty":true}]

这是一个在索引为0的单个元素的数组,它是一个具有单个属性'notempty'的对象;。

答案 2 :(得分:1)

默认情况下,如果在php中使用编码关联数组,则在解码时它将成为js对象。为了使它成为一个数组,你需要在php中使它成为一个数组:

PHP:

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

否则,您应该将其转换为JS中的数组,但在我看来这是一种浪费,因为在javascript中循环遍历对象非常容易:

Javascript:

var arr = new Array();
for(var i in obj) arr[i] = obj[i];

答案 3 :(得分:0)

您可以使用jQuery将其解析为如下数组:

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

我当然假设您要解析JSON,而不是数组或任何其他字符串。