2013-03-08 104 views
8

我有一個問題,使用json_encode從數組中生成json編碼的字符串。PHP json_encode問題與數組0鍵

有問題的陣列的部分看起來像這樣

RatingDistribution (Array, 11 elements) 
    0 (Array, 1 element) 
     0 (String, 3 characters) 4.5 
    1 (Array, 1 element) 
     1 (String, 4 characters) 11.9 
    2 (Array, 1 element) 

但在字符串中產生這樣的:

"RatingDistribution":[["4.5"],{"1":"11.9"}, 

我希望這樣的:

"RatingDistribution":[{"0":"4.5"},{"1":"11.9"}, 

所有我米做的是這樣的:

$result = json_encode($array); 

我做錯了什麼,或者我是否需要更多代碼來確保0鍵存在?

乾杯 安迪

+1

您可以發佈PHP代碼你在哪裏得到的陣列?或者print_r數組?看起來你的預測是錯誤的。 – 2013-03-08 09:37:49

+0

我認爲它擰在第二個元素(索引1),因爲它的子數組從1開始,因此被解釋爲字符串鍵。 – TFennis 2013-03-08 09:39:20

回答

-1

湊可以嘗試投陣列鍵例如用strval或(串)的字符串。

+1

這應該是評論! – sandip 2013-03-08 09:39:30

+1

這是我的第一個想法,但它沒有區別,用引號括起來,但它使得非常混亂的JSON :) – 2013-03-08 10:46:07

14

您所得到的結果應該是預期的; json_encode檢測到您只使用數組中的數字鍵,因此它會將其轉換爲數組而不是JSON中的對象。大多數時候,這正是你想要做的。

如果由於某種原因你沒有(爲什麼?),在PHP> = 5.3可以使用JSON_FORCE_OBJECT標誌,讓您所需的輸出:

$result = json_encode($array, JSON_FORCE_OBJECT); 
+0

行爲有點奇怪,例如第一個值將解碼爲一個數組,其中所有後續值將是對象。 – 2013-03-08 10:29:49

+0

我懷疑我們將不得不使用JSON_FORCE_OBJECT – 2013-03-08 10:30:28

+0

@ user2147830:恕我直言,不是很奇怪。第二個數組的第一個鍵不是'0',這足以讓試探決定「OK,這是一個關聯數組」。 – Jon 2013-03-08 10:39:27

1

如果你想在你的JSON使用數組那麼可以不用JSON_FORCE_OBJECT參數就可以將數組強制轉換爲對象。

問題:

json_encode([0 => [1,2,3]]); // Return: [[1,2,3]] 
json_encode(["0" => [1,2,3]]); // Return: [[1,2,3]] 
json_encode([1 => [1,2,3]]); // Return: {"1":[1,2,3]} 

不是我們所期望:

json_encode([0 => [1,2,3]], JSON_FORCE_OBJECT); // Return: {"0":{"0":1,"1":2,"2":3}} 

解決方案:

json_encode((object)[0 => [1,2,3]]); // Return: {"0":[1,2,3]} 
json_encode(new \ArrayObject([0 => [1,2,3]])); // Return: {"0":[1,2,3]}