2014-06-07 61 views
0

我有一个JSON响应,但是这种标准格式?解析JsonArray无钥匙在android

[{"code":"123","rate":"0.1","title":"sss","subtitle":"mmm"},{"code":"456","rate":"0.1","title":"bbb","subtitle":"uuu"}] 

我怎么能解析它在android中?

new JSONObject(result.toString()) 

抛出异常!

06-07 11:45:54.943: W/System.err(10310): at org.json.JSON.typeMismatch(JSON.java:111) 
06-07 11:45:54.943: W/System.err(10310): at org.json.JSONObject.<init>(JSONObject.java:158) 
06-07 11:45:54.943: W/System.err(10310): at org.json.JSONObject.<init>(JSONObject.java:171) 
+0

是它是有效的,你可以粘贴您的JSON在http://jsonlint.com/用于检查验证 –

+1

您的JSON是一个数组不是一个对象,所以你需要'新JSONArray(result.toString());' –

回答

2

我有一个JSON响应,但这种标准格式?

它会在开始时没有<,最后没有。所以:

new JSONObject(result.toString().substring(1, result.length() - 2)); 

或更可能:

new JSONArray(result.toString().substring(1, result.length() - 2)); 

,因为它的顶层是一个数组。

既然你已经删除了<>你原本有:

由于它的顶层是一个数组,你可能想JSONArray,不JSONObject

new JSONArray(result.toString()); 
+0

你correct.but问题不是< and >;谢谢 –

+0

@Mimad:在哪些方面不是那些?那些使它无效JSON,所以你不能解析它。没有他们,它*是*有效的JSON,你可以解析它。 (另外:你可能想'新的JSONArray'而不是'new JSONObject',因为它是一个数组,而不是一个对象,我已经添加了这个。) –

+0

这是我在登录时遇到的错误:D –

1

这是JSONarray

[{"code":"123","rate":"0.1","title":"sss","subtitle":"mmm"},{"code":"456","rate":"0.1","title":"bbb","subtitle":"uuu"}] 

尝试解析

new JSONArray(result.toString()) 
1

首先分配你的JSON数组这样

JSONArray jsar=new JSONArray(result); 

然后解析对象这样

for(int i=0;i<jsar.length;i++) 
{ 
JSONObject jsobj=new JSONObject(jsar[i]); 

String strcode=jsobj.get("code"); 

String strrate=jsobj.get("rate"); 

String strtitle=jsobj.get("title"); 

String strsubtitle=jsobj.get("subtitle"); 
} 

希望这将帮助你吧。