我有2个链接;它给出了json数据。我试图从使用asynTask的android中的相同活动的url中获取值。做了编码,直到将数据转换为字符串(存储在 jsonStr1 中)。但现在出现了问题。因为,在2个网址中: 一个以JSON对象开始 -
{ "contacts": [ {"id": "c200", "name": "Ravi Tamada" },
{ "id": "c201", "name": "Johnny Depp" }
]
}
另一个用JSON数组开始 -
[{"appeId":"1","survId":"1"},
{"appeId":"2","survId":"32"}
]
现在我将如何为他们提供一个条件,无论是知道它的JSON数组还是对象? JSON数组是我知道的对象,但无法找到如何分离它们。我试过以下:
JSONObject jsonObj = new JSONObject(jsonStr1);
if(jsonObj instanceof JSONArray){}
但是如果条件显示错误 - 不兼容的条件操作数类型JSONObject和JSONArray
答案 0 :(得分:5)
您只需使用startsWith for String来检查字符串以{
或[
boolean isJsonArray = jsonResponse.startsWith("[");
if(isJsonArray){
// Its a json array
}
else{
// Its a json object
}
答案 1 :(得分:1)
您可以使用JSONTokener类,这是一个示例代码。
Object json = new JSONTokener(response).nextValue();
if (json instanceof JSONObject){
JSONObject result = new JSONObject(response);
}
else if (json instanceof JSONArray){
JSONArray resultArray = new JSONArray(response);
}
答案 2 :(得分:0)
制作jsonobject并调用你想要调用的地方
jsonobject = JSONfunctions
.getJSONfromURL("http://ampndesigntest.com/androidapi/CURRENTPROJECTDATA/textfiles/hotels");
try {
// Locate the array name in JSON
jsonarray = jsonobject.getJSONArray("worldpopulation");
for (int i = 0; i < jsonarray.length(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
jsonobject = jsonarray.getJSONObject(i);
// Retrive JSON Objects
map.put("rank", jsonobject.getString("rank"));
map.put("country", jsonobject.getString("country"));
map.put("population", jsonobject.getString("population"));
map.put("flag", jsonobject.getString("flag"));
// map.put("latlongitude", jsonobject.getString("latlongitude"));
// Set the JSON Objects into the array
arraylist.add(map);
}
} catch (JSONException e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return null;
答案 3 :(得分:0)
您可以使用has(String)
方法检查JSONObject
是否包含主要联系人。
if(jsonOjbect.has("contacts") {
...
}
else {
...
}