解析一个JSON字符串到数组,而不是对象
我有一个PHP数组,并用json编码将它回显到javascript,我需要这样做,因为它会非常动态。这是它的回波的代码:解析一个JSON字符串到数组,而不是对象
{"notempty":true}
我用这个来,将其转换为JavaScript:
var myarray = eval('(' + json + ')');
出于某种原因,它创建了一个对象,而不是一个数组的,为此,我不能使用.length或for循环。
有人知道我在这里做错了什么吗?
由于
你试图把一个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]);
不要忘记使用[hasOwnProperty](https://developer.mozilla。org/en/JavaScript/Reference/Global_Objects/Object/hasOwnProperty):if(myObj.hasOwnProperty(it)){do something}' –
非常感谢,告诉我通过一个对象循环的方式完全解决了我的问题。 – Chris
{}
是一个对象,它包含一个名为notempty
一个属性。如果你想要的阵列,它不得不是
[{"notempty":true}]
这与在索引0处,这与单个属性一个“NotEmpty”对象的单个元件的阵列;.
默认情况下,如果您在php中使用encode和assoc数组,它将在您解码时变为js对象。为了拥有它是一个数组,你需要做一个数组在PHP中:
PHP:
$arr = "['notempty','notempty2','notempty3']";
否则,你应该把它转换为JS数组,但在我看来,一个因为通过JavaScript中的对象循环浪费是如此容易得多:
的Javascript:
var arr = new Array();
for(var i in obj) arr[i] = obj[i];
您可以使用jQuery解析它变成一个这样的数组:
var p = [];
$.each(jsonData, function (key, val) {
p.push([val.propertyOne, val.propertyTwo]);
});
我假设你要解析JSON,而不是一个数组或任何其他字符串,当然。
在JS枚举数组(或什么是PHP中的枚举数组)行为就像对象 – Mchl
原因是你不能在JavaScript中有关联数组。对象是最接近的匹配项。 –
请勿使用eval。使用JSON的解析方法,如jQuery的http://api.jquery.com/jQuery.parseJSON或使用Douglas Crockford的parseJSON方法。见https://github.com/douglascrockford/JSON-js(下载json2.js) – nickytonline