2016-01-05 66 views
-2

我使用一個給我一些JSON的API。json.length()關聯數組格式

當我取回10或更少的元素,我的JSON被格式化爲這樣的:

[ 
{"data":"data1","data2":"data3"}, 
{...}, 
{"data":"data1","data2":"data3"} 
] 

,當我取回超過10元,json_encode格式我DATAS是這樣的:

{"0":[{"data":"data1","data2":"data3"}], 
"...":[{...}], 
"12":[{"data":"data1","data2":"data3"}] 
} 

這個JSON在兩種情況下都有效,但是我不能在第二個JSON中使用JS中的myJson.length

我該怎麼做,如果不行,我該怎麼做才能測試我的JSON數組的長度?

謝謝:)

+2

在第二種情況下,您有一個對象,而不是一個數組。 – Quentin

+0

for second JSON,Object.keys(data).length,@Quentin是對的 –

+0

我無法重現該問題。當我有一個包含10個以上項目的PHP數組時,'json_encode'正確地產生了一個JSON數組。 https://www.evernote.com/l/AAP9pO9qWgxMSLmeidDDcU4E0jCWbd4Lwrw – Quentin

回答

1

原因json_encode將返回後者格式如果不是所有按鍵被連續有序的數值。原因是PHP只有一個數組類型,但是這根據它包含的鍵映射到JSON []數組或{}對象。這意味着在編碼之前,您可以以某種方式打開陣列中的按鍵。你的修復應該在那裏,而不是在Javascript一側。

+0

就是這樣,在創建'json_encode()'強制PHP創建一個對象之前'unset()'數據。 – Jiedara

0

第二JSON其實也不是一個JSON數組,但JSON對象,你可以做如下,以獲取對象中的所有鍵的數組,然後從得到的長度:

Object.keys(JSON).length 
+2

...但是,這確實要求您確定您首先有對象,並且可能無法正確保留數據的順序。您應該修復生成該對象的PHP,以便它生成一個數組。 – Quentin

+0

與@Quentin一致,處理JSON對象正在解決真正的問題,即返回不穩定數據的API。 –