2014-09-20 70 views
-2

所以,我所做的是我有一個空陣列。json_encode在JavaScript中使用的空數組給出了一個空數組,但是如果json_enode在數組上使用某些值完成,它會給出對象?

$text['test'] = array(); 
echo json_encode($text) 

如果我json_encode它。結果是 {「test」:[]}

如果我在JavaScript中使用它,它將被視爲數組。 如果在陣列中的某些值

$text['test'] = array('1' =>'abc'); 
echo json_encode($text); 

輸出是

{"test":{"1":"abc"}} 

而這被視爲在JavaScript的對象。如何在這種情況下,我收到一個對象不是數組或反之亦然?數組中的值($ text ['test'])是動態的。

+1

你能告訴我javascript數組在哪裏嗎? – 2014-09-20 13:25:14

+0

我已經在php文件中使用了javascript數組 ,比如 Garima 2014-09-20 13:28:27

+0

這樣做 - > echo json_encode($ text ['test']); ,如果此作品請通過對此評論投票通知我; – 2014-09-20 13:29:46

回答

0

這就是json_encode如何串行化數組。如果它是一個數字且連續索引的數組,它將把它作爲一個json數組進行序列化。如果數組具有非數字或數字但不是連續索引,則它會將其作爲對象序列化以正確保持索引。

+0

是的。但有什麼辦法,所以我不必進一步檢查,以確定它是一個數組還是對象。 – Garima 2014-09-20 13:32:30

0

由於陣列中的鍵不是從0開始,所以PHP的json_encode將結果輸出爲對象。

爲了得到一個數組,使用0作爲第一個指標:

$text['test'] = array('0' =>'abc'); 

或者更好的是:

$text['test'] = array('abc'); 

...,依次繼續索引。最簡單的方法可能是單獨添加的條目:

$text['test'] = array(); 
$text['test'][] = 'abc'; 
$text['test'][] = 'def'; 

或者

$text['test'] = array('abc', 'def'); 
+0

是的,從0開始使它成爲一個數組。謝謝......但我不能用0開始數組索引,因爲即使數組的鍵是動態的也是隨機的,在任何情況下它都不會爲0。你能建議任何其他解決方案嗎? – Garima 2014-09-20 13:43:43

+0

@Garima:JSON只給你兩個選擇:它或者是一個數組,它意味着鍵是隱含的,從0開始,並且連續地繼續;或者它是一個對象,鍵必須明確給出,並且可以是任何字符串。在JSON中,無法使用不以0開頭的鍵或稀疏數組來表示數組。你需要確保你的序列化結果是JSON數組,否則你將不得不在接收端處理一個對象。注意:在接收到這個的JavaScript中,如果你使用一個對象,你可以使用'Object.keys'來獲得它的一個鍵的數組;可能會有用。 – 2014-09-20 13:52:23

+0

是的,我使用過: - Object.keys。但是當數組爲空時,我得到一個錯誤。我正在接受「測試不是一個對象」。當它不是空的時候,每件事都可以正常工作。順便說一句,謝謝你的解釋.. :) – Garima 2014-09-20 18:00:13

0

問題不是Javascript支持,但是PHP如何處理數組和哈希。在PHP中,數組像

$arr = array(1, 2, 3); 

被視爲一個數組。但是當你用鍵創建一個數組;

$arr = array("hello" => "world"); 

它隱含地變成散列。這確實很奇怪,會導致像你在這裏討論的問題。

在Javascript中,但是,其差別是很清楚的:

[1, 2, 3] 

是陣列;和

{hello: "world"} 

是一個對象。

+0

*「一個數組不能有鍵」*這實際上不是真的:'var a = []; a.foo =「bar」; console.log(a.foo);'顯示''bar「'。普通的JavaScript數組[根本不是真正的數組](http://blog.niftysnippets.org/2011/01/myth-of-arrays.html),它們只是由具有特殊性的'Array.prototype'支持的對象我們稱之爲「元素」和一個特殊的「長度」屬性的一類屬性的行爲。像所有對象一樣,可以具有任意鍵以及我們稱之爲「索引」的特殊類別的鍵。現在* JSON *,另一方面,對數組的限制要多得多。 – 2014-09-20 13:41:32

+0

@ T.J.Crowder點,這是一個錯誤。我會進行編輯。 – Ashesh 2014-09-20 13:47:05

0

下面是一個關聯數組:

$text['test'] = array('1' =>'abc'); 

PHP json_encode總是輸出關聯數組的對象:

{"test":{"1":"abc"}} 

您可以使用JavaScript數組常量來代替:

var text = [「abc」]; 
0

快速修復:只需修改代碼中的一行

更改此:

echo json_encode($text); 

要:

echo json_encode($text.test); 

'測試' 是 '文本' 對象的屬性,您可以訪問使用 ''運算符

相關問題