我正在使用json.org库来解析我的json。但我有一个名为“消息”的字段,根据消息的数量可能会出现空字段,JSONObject(如果只有一个消息)或JSONArray(如果有多个消息)。我在处理这个问题时遇到了一些麻烦,因为我必须使用正确的对象类型来读取它,因为如果我做得不对,它会返回一个错误。哦,它是Java。解析json字段,可能是java中的JSONObject或JSONArray
任何人都可以帮助我吗?我相信有一种“非标准”的方式来对待这个!
我正在使用json.org库来解析我的json。但我有一个名为“消息”的字段,根据消息的数量可能会出现空字段,JSONObject(如果只有一个消息)或JSONArray(如果有多个消息)。我在处理这个问题时遇到了一些麻烦,因为我必须使用正确的对象类型来读取它,因为如果我做得不对,它会返回一个错误。哦,它是Java。解析json字段,可能是java中的JSONObject或JSONArray
任何人都可以帮助我吗?我相信有一种“非标准”的方式来对待这个!
假设你正在使用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。
我只是想创建一个简单实用的方法,像这样:
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"));
}
的最佳解决方案!真的很喜欢它! – Filipe
很高兴帮助:-) – jabclab