2015-11-04 102 views
1

我正在調用外部web服務,它們以json格式返回響應,如下所示。但是當我嘗試用gson解析時,它會拋出一個錯誤。另外,當我根據jsonlint.com驗證它時,它顯示無效的json格式。現在我想知道如果我做錯了什麼,或者他們以錯誤的格式發送json數據。如果它在那麼正確的格式是什麼我缺少正確解析它驗證json格式

({"data":[["0",22247,2764,99.96,0,0],["UNDEFINED",3,1,0.04,-2.08,0]],"totalCount": 2})

錯誤Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 3 path $

代碼JsonElement jelement = new JsonParser().parse(data);

+0

此字符串是JSON有效(有http://jsonviewer.stack.hu/測試)。 –

+1

brakets('和')'是否也在返回的字符串中? – Maraboc

+0

@Maraboc是的回覆包括(和) – dazzle

回答

0

試着這樣做:

JsonElement jelement = new JsonParser().parse(data.substring(1, data.length()-1)); 

結果是:

{ 
    "data": [ 
    [ 
     "0", 
     22247, 
     2764, 
     99.96, 
     0, 
     0 
    ], 
    [ 
     "UNDEFINED", 
     3, 
     1, 
     0.04, 
     -2.08, 
     0 
    ] 
    ], 
    "totalCount": 2 
} 
1

這些問題,可就是這樣Gson Json parser Array of Arrays

你有類似的創建一個對象,如:

package pruebas; 

import java.util.List; 

public class ResponseObject { 

private List<List<Object>> data; // parse the "data":[["0",22247,2764,99.96,0,0] 
private int totalCount; // parse the "totalCount": 2 
public List<List<Object>> getData() { 
    return data; 
} 
public void setData(List<List<Object>> data) { 
    this.data = data; 
} 
public int getTotalCount() { 
    return totalCount; 
} 
public void setTotalCount(int totalCount) { 
    this.totalCount = totalCount; 
}} 

的你要調用的函數GSON在代碼:

String json = "{\"data\":[[\"0\",22247,2764,99.96,0,0],[\"UNDEFINED\",3,1,0.04,-2.08,0]],\"totalCount\": 2}"; 
final Gson gson = new Gson(); 
ResponseObject response = gson.fromJson(json, ResponseObject.class);  

數據屬性必須List<List<Object>>,因爲你不知道什麼樣的對象包含了JSON數組。