Parse platform 这是一个有效的JSONObject&;如果是,那么如何迭代以获取所有值
我有一个来自服务器的响应,它是一个有效的JSONParse platform 这是一个有效的JSONObject&;如果是,那么如何迭代以获取所有值,parse-platform,jsonobject,Parse Platform,Jsonobject,我有一个来自服务器的响应,它是一个有效的JSON {"Avg":[{"avg":3,"rcid":"ww44sd"},{"avg":4,"rcid":"ww24hj"},{"avg":3,"rcid":"ww36hd"},{"avg":4,"rcid":"ww89yx"},{"avg":3,"rcid":"ww64tf"},{"avg":4,"rcid":"ww76py"}]} 我编写了以下代码,但我无法理解这是如何不是JSONObject的。Logcat显示此错误 致命异常:main jav
{"Avg":[{"avg":3,"rcid":"ww44sd"},{"avg":4,"rcid":"ww24hj"},{"avg":3,"rcid":"ww36hd"},{"avg":4,"rcid":"ww89yx"},{"avg":3,"rcid":"ww64tf"},{"avg":4,"rcid":"ww76py"}]}
我编写了以下代码,但我无法理解这是如何不是JSONObject的。Logcat显示此错误
致命异常:main java.lang.ClassCastException:java.util.HashMap无法强制转换为org.json.JSONObject
ParseCloud.callFunctionInBackground("avgfunc", params, new FunctionCallback<JSONObject>() {
public void done(JSONObject response, ParseException e) {
if (e == null) {
try {
JSONObject jsonRoot = new JSONObject(response);
JSONArray jsonarr = jsonRoot.getJSONArray("Avg");
for (int i = 0; i < jsonarr.length(); i++) {
JSONObject json = jsonarr.getJSONObject(i);
//do some processing...
}
} catch (JSONException e1) {
e1.printStackTrace();
}
}))
所以我想知道如何构造正确的JSONObject,以便稍后在android中迭代各个项目
编辑:堆栈跟踪
2937-2937/com.muffin.testapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.ClassCastException: java.util.HashMap cannot be cast to org.json.JSONObject
at com.muffin.testapp.CollinfoActivity$2.done(CollinfoActivity.java:133)
at com.parse.ParseTaskUtils$2$1.run(ParseTaskUtils.java:107)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
第133行是ParseCloud.callFunctionInBackground(“getAVGrating”,参数,new FunctionCallback(){json字符串似乎是合法的。下面是一些解析它的代码 我使用的是从这里下载的json-simple-1.1.1.jar:
json字符串似乎是合法的。下面是一些代码来解析它 我使用的是从这里下载的json-simple-1.1.1.jar:
只是遇到了同样的问题。你的JSON没有什么问题,只是
callFunctionInBackground
函数将自己的所有JSONArray解析为List,而将JSONObject解析为Hashmap
。因此,你实际上得到的不是一个JSONObject,而是一个Hashmap
函数遇到了同样的问题。没有什么问题有了JSON,它就是callFunctionInBackground
函数,它将自己所有的JSONArray解析为List,并将JSONObject解析为Hashmap
。因此,你实际上得到的不是一个JSONObject,而是一个Hashmap,这里一定有你没有展示给我们的东西。你能给我们展示完整的堆栈跟踪,而不仅仅是t吗异常消息?这里一定有你没有给我们看的东西。你能给我们看完整的堆栈跟踪,而不仅仅是异常消息吗?这里一定有你没有给我们看的东西。你能给我们看完整的堆栈跟踪,而不仅仅是异常消息吗?
2937-2937/com.muffin.testapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.ClassCastException: java.util.HashMap cannot be cast to org.json.JSONObject
at com.muffin.testapp.CollinfoActivity$2.done(CollinfoActivity.java:133)
at com.parse.ParseTaskUtils$2$1.run(ParseTaskUtils.java:107)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
public class JsonExample {
public static void main(String[] args) throws Exception {
System.out.println("Starting example...");
String str = "{\"Avg\":[{\"avg\":3,\"rcid\":\"ww44sd\"},{\"avg\":4,\"rcid\":\"ww24hj\"},{\"avg\":3,\"rcid\":\"ww36hd\"},{\"avg\":4,\"rcid\":\"ww89yx\"},{\"avg\":3,\"rcid\":\"ww64tf\"},{\"avg\":4,\"rcid\":\"ww76py\"}]}";
JSONParser parser = new JSONParser();
Object obj = parser.parse(str);
JSONObject json = (JSONObject) obj;
Object avgObj = json.get("Avg");
JSONArray avgArray = (JSONArray) avgObj;
System.out.println("JSON Strings for averages:");
for(int i=0;i<avgArray.size();i++) {
JSONObject current = (JSONObject)avgArray.get(i);
System.out.println("\t" + current);
}
System.out.println("Averages:");
for(int i=0;i<avgArray.size();i++) {
JSONObject current = (JSONObject)avgArray.get(i);
System.out.println("\tAvergage: " + current.get("avg"));
}
System.out.println("Done.");
}
}
Starting example...
JSON Strings for averages:
{"avg":3,"rcid":"ww44sd"}
{"avg":4,"rcid":"ww24hj"}
{"avg":3,"rcid":"ww36hd"}
{"avg":4,"rcid":"ww89yx"}
{"avg":3,"rcid":"ww64tf"}
{"avg":4,"rcid":"ww76py"}
Averages:
Avergage: 3
Avergage: 4
Avergage: 3
Avergage: 4
Avergage: 3
Avergage: 4
Done.