2011-10-17 45 views
0

什麼是[在JSON之間不同{和之間是什麼不同{和[在PHP中json_encode JSON

模式1:

"cell": { "id": "3961" } 

模式2:

"cell": [ "id": "3961" ] 

如何我可以通過json_encode將模型1傳輸到2嗎?

+6

模型2無效JSON。你的意思是_「cell」:[{「id」:「3961」}] _? –

+1

是的,#2是無效的JSON。 「{}」和「[]」之間的區別在於第一個表示「對象」(在許多計算機語言中翻譯爲「詞典」),而第二個表示「數組」。 –

+0

ty男人我明白了。 – sweb

回答

2

{是一個對象, [是一個數組。

查看official Docs

在你的情況,第一個例子是一個普通的對象,其屬性名爲 id。第二個示例是 associative array,其索引爲 id JSON沒有關聯數組。第二個例子是無效的JSON。

這是因爲JSON是JavaScript對象通知,JavaScript不知道關聯數組。相反,JavaScript允許您動態地將新屬性添加到對象,並允許您使用括號訪問任何對象屬性:Object['property']

所以,對象是JavaScript中的一類關聯數組,因此使用JSON。

由於json_encode()函數編碼從提供的對象中創建JSON字符串,所以您需要傳遞一個對象而不是數組。

1
php > echo json_encode(array('a', 'b')); 
["a","b"] 
php > echo json_encode(array('a' => 'A', 'b' => 'B')); 
{"a":"A","b":"B"} 

[ - >數字陣列
{ - >關聯數組在PHP,對象在JavaScript

+1

'{}'=對象,而不是數組 – knittl

+0

說明了一下,謝謝:) – TimWolla

+0

仍然不完全正確。您可以告訴PHP將JavaScript對象/字典解碼爲關聯數組,但這甚至不是默認值。默認情況下,PHP將創建'stdClass'的實例。 – knittl

3

「的模式2」無效JSON。 JSON允許具有命名屬性的對象(您的「model 1」),但數組可能沒有命名鍵。

因此,json_encode無法輸出您的「型號2」

1

您的模型2無效JSON。 JSON數組不能包含密鑰,這就是JavaScript中的對象({"key":"value"}

但是,如果要創建數組而不是對象,則可以將JSON字符串解碼爲PHP的關聯數組(json_decode($json, TRUE))。

相關問題