我有一個PHP數組,並用json編碼將它回顯到javascript,我需要這樣做,因爲它會非常動態。這是它的回波的代碼:解析一個JSON字符串到數組,而不是對象
{"notempty":true}
我用這個來,將其轉換爲JavaScript:
var myarray = eval('(' + json + ')');
出於某種原因,它創建了一個對象,而不是一個數組的,爲此,我不能使用.length或for循環。
有人知道我在這裏做錯了什麼嗎?
由於
我有一個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