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

Chr*_*ris 5 javascript php arrays json object

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

{"notempty":true}
Run Code Online (Sandbox Code Playgroud)

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

var myarray = eval('(' + json + ')');
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

cwa*_*ole 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] );
Run Code Online (Sandbox Code Playgroud)

  • 迭代对象属性时,不要忘记使用[hasOwnProperty](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/hasOwnProperty):`for(var it in myObj)if(myObj) .hasOwnProperty(it)){做某事}` (3认同)