我正在从此链接解析JSON数据:
http://twyst.in/api/v1/near/30/30
由于数据太大,我在这里仅发布(问题)相关数据:
{ " info":" [{\" outlet \":{\" __ v \":1,\" _id \& #34;:\" 5316d59326b019ee59000026 \" \"照片\":[],\" twyst_meta \":{\" recommend_list \":[],\"评论\":[]},\" outlet_meta \":{\"链接\&#34 ;: [],\"状态\":\"有源\" \"占\":[\" 531574eeae738d654c00000a \&#34 ; \" 535a1a1e827651ca03000122 \"]},\"属性\":{\" dine_in \":真,\"室外\ ":true,\" air_conditioning \":\"不可用\",\"停车\":\"可用\",\"预订\":\"不需要\",\" wifi \":\"不可用\" \"标记\":[\"披萨\" \"面食\" \"意大利\ ",\" Galleria \",\" DLF第4期\"],\" payment_options \":[\"现金\" \" AMEX \" \"签证\" \"主\&#34],\"菜肴\":[\"意大利\" \"披萨\" \"冰淇淋\&#34],\"定时\":\"上午11点 - 晚上11点\& #34; \" cost_for_two \":{\"分钟\":3,\"最大\&#34:4}},\&# 34;链接\":{\" other_urls \":[],\" youtube_url \":\" \" \& #34; twitter_url \":\" \" \" facebook_url \":\" https://www.facebook.com/pages/Crusty-gourmet-pizza-more/390843954384130 \" \ " WEBSITE_URL \":\" \"},\"接触\":{\"电子邮件\":{\ "电子邮件\":\" bob_nugent56@yahoo.com \" \"人\":\" \"} ,\"电话\":{\"数\":\" \" \"座机\":\ " 02355156616 \" \" reg_mobile \":[{\" _id \":\" 4639320000e4532779b17de7 \" \ " NUM \":\" 9134000410 \"}
这不是JSON数据的结束,它继续......
但是当执行以下代码行时,我得到一个JSONException。 e.printStackTrace()方法告诉我有typeMismatch错误。
JSONObject object = new JSONObject(str); //1
JSONArray array = object.getJSONArray("info"); //2
我尝试用以下代码替换第2行:
JSONObject newObject = object.getJSONObject("info");
但在这里我也遇到了同样的问题。
我检查了完整的数据,这是正确的,没有语法错误。 有人可以帮我解决这个问题吗?在JSONArray启动之前是否存在双引号可能是此问题的根源?
感谢。
答案 0 :(得分:2)
info
不是数组或对象。它是一个字符串,恰好包含另一个数组的JSON编码表示。您将必须获取该字符串并通过第二个JSON解码传递运行它:
JSONArray array = new JSONArray(object.getString("info"));
答案 1 :(得分:0)
JSONObject json;
Object info;
JSONArray infoJsonArray;
JSONObject infoObject;
json = new JSONObject(str);
Object info= json.get("info");
if (info instanceof JSONArray) {
// It's an array
infoJsonArray = (JSONArray)info;
}
else if (info instanceof JSONObject) {
// It's an object
infoObject = (JSONObject)info;
} else {
// It's something else, like a string or number
}