2012-01-23 33 views
0

我正在使用json.org库来解析我的json。但我有一个名为“消息”的字段,根据消息的数量可能会出现空字段,JSONObject(如果只有一个消息)或JSONArray(如果有多个消息)。我在处理这个问题时遇到了一些麻烦,因为我必须使用正确的对象类型来读取它,因为如果我做得不对,它会返回一个错误。哦,它是Java。解析json字段,可能是java中的JSONObject或JSONArray

任何人都可以帮助我吗?我相信有一种“非标准”的方式来对待这个!

回答

0

假设你正在使用JSONTokener

JSONTokener jk = ...; // whatever you're currently doing. 

// Probably a loop here around the below... 

Object o = jk.nextValue(); 
if(o instanceof JSONObject){ 
    JSONObject jo = (JSONObject)o; 
    // Do something with jo. 
}else if(o instanceof JSONArray){ 
    JSONArray ja = (JSONArray)o; 
    // Do something with ja. 
}else{ 
    // Is null or another type. (Maybe do something?) 
} 

的,可以从nextValue()返回的所有其他类型见http://www.json.org/javadoc/org/json/JSONTokener.html#nextValue%28%29

1

我只是想创建一个简单实用的方法,像这样:

private void processMessages(Object messages) { 
    JSONArray jsonArr; 
    if (messages instanceof JSONObject) { 
     jsonArr = new JSONArray(); 
     jsonArr.put(messages); 
    } else if (messages instanceof JSONArray) { 
     jsonArr = messages; 
    } 

    // Process all the JSONObjects in the same way 
    for (final JSONObject obj : jsonArr) { 

    } 
} 

然后从你的代码中:

if (jsonObj.has("messages")) { 
    processMessages(jsonObj.get("messages")); 
} 
+0

的最佳解决方案!真的很喜欢它! – Filipe

+0

很高兴帮助:-) – jabclab

相关问题