我有一个PHP数组并使用json编码将其回显到javascript中,我需要这样做,因为它会非常动态。这是它回应的代码:
{"notempty":true}
我使用它,将其转换为javascript:
var myarray = eval('(' + json + ')');
由于某种原因,它创建了一个对象而不是一个数组,因此我不能使用.length或for循环。
有人知道我在这里做错了吗?
由于
答案 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,而不是数组或任何其他字符串。