2013-02-14 74 views
1

有數組的數組:的Android解析JSON json_encode

Array 
(
[0] => Array ( [0] => v1 [1] => v2 [2] => v3) 
[1] => Array ( [0] => v1 [1] => v2 [3] => v3) 
[2] => Array ( [0] => v1 [1] => v2 [10] => v3) 
[4] => Array ( [0] => v1 [1] => v2 [3] => v3) 
) 

json_encode上的Andorid之後,我得到如下:

{ 
«0»: [ «v1», «v2», «v3» ], 
«1»: { «0»:«v1», «1»:«v2», «3»:«v3», }, 
«2»: { «0»:«v1», «1»:«v2», «10»:«v3» }, 
«4»: { «0»:«v1», «1»:«v2», «3»:«v2» } 
} 

JSONArray jList = jb.getJSONArray(response); //exception is not array 

有沒有在解析此爲Array[Array[]]的好方法Android的?

+0

您能向我們展示整個PHP代碼塊,它以數組作爲輸入開始並以包含'«/'»'字符的字符串結尾。這裏有一些非常奇怪的事情,但我無法從你發佈的內容中看到它。 – SDC 2013-02-14 14:05:16

+0

我不能訪問php腳本。作者向我展示了json_encode之前和之後的數組調試打印。 http://www.php.net/manual/en/function.json-encode.php序列數組示例 – 2013-02-14 14:30:56

+0

好吧,php的'json_decode'不會把這些'«/'»'字符放在那裏,所以我'不知道他們來自哪裏。他們顯然不是標準的json。標準的json應該有用於引號的'''字符 – SDC 2013-02-14 14:37:16

回答

0

發生這種情況是因爲您有非連續的索引。如果您有

$a = array_values($a); 

「重新編排」的數組,你將有

Array 
(
    [0] => Array ( [0] => v1 [1] => v2 [2] => v3) 
    [1] => Array ( [0] => v1 [1] => v2 [3] => v3) 
    [2] => Array ( [0] => v1 [1] => v2 [10] => v3) 
    [3] => Array ( [0] => v1 [1] => v2 [3] => v3) 
) 

,因此json_encode將創建

[ ["v1", "v2", "v3"], { "0": "v1", ...}, ... ] 

如果你想擁有內部數組也一樣,你必須確保內部數組也有連續的索引。

如果您無法更改PHP代碼,唯一的方法就是將其解析爲JSON對象並使用keys()迭代屬性並逐個選取值。

+0

我只能在android.php腳本上解析結果 – 2013-02-14 14:39:16

+0

@AlexandrSulimov但是你的同事可以修復他的代碼,否則你必須作爲一個對象解析。看到更新後的答案 – 2013-02-14 14:51:49

+0

沒有理由改變php腳本,這是php json_encode在順序數組上的默認方式,我在android中尋找小編碼的方法。頂級數組是JSSONObject的第二級JSONArray [0],JSSONObject [1] ,JSSONObject [2],JSSONObject [4]。但是,如果chage第四個元素從​​[4]到[3] json_encode優化並且頂級數組是JSONArray – 2013-02-14 14:59:06