parse.com - Is this a valid JSONObject & if yes then how do I iterate to get all the values -
i have response server valid 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"}]}
i wrote following code fail understand how not jsonobject. logcat shows error fatal exception: main java.lang.classcastexception: java.util.hashmap cannot cast 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"); (int = 0; < jsonarr.length(); i++) { jsonobject json = jsonarr.getjsonobject(i); //do processing... } } catch (jsonexception e1) { e1.printstacktrace(); }
in cloudcode generating response this
parse.cloud.define("avgfunc", function(request, response) { var idlist = request.params.someids; var _ = require("underscore"); var newlist = {"avg":[]}; //this initialize & later push ...... _.each(idlist,function(categoryid){ ...... query.find({ success: function(results) { if(results.length==0){ console.log("no row found"); } //some more processing of data & push newlist.avg.push({ //& "avg":somevalue, "rcid":somevalue }); } if(counter == idlist.length) { response.success(newlist); //this sends response shown above } }, error: function() { response.error("error."); } }); });
});
so wanna know how construct proper jsonobject can iterate on individual items later in android.
edit : stack trace
2937-2937/com.muffin.testapp e/androidruntime﹕ fatal exception: main java.lang.classcastexception: java.util.hashmap cannot cast org.json.jsonobject @ com.muffin.testapp.collinfoactivity$2.done(collinfoactivity.java:133) @ com.parse.parsetaskutils$2$1.run(parsetaskutils.java:107) @ android.os.handler.handlecallback(handler.java:605) @ android.os.handler.dispatchmessage(handler.java:92) @ android.os.looper.loop(looper.java:137) @ android.app.activitythread.main(activitythread.java:4424) @ java.lang.reflect.method.invokenative(native method) @ java.lang.reflect.method.invoke(method.java:511) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:784) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:551) @ dalvik.system.nativestart.main(native method)
line 133 parsecloud.callfunctioninbackground("getavgrating", params, new functioncallback<jsonobject>() {
the json string seem legit. here's code parse it.
i'm using json-simple-1.1.1.jar downloaded here: https://code.google.com/p/json-simple/downloads/detail?name=json-simple-1.1.1.jar&can=2&q=
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 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."); } }
edit: here's output.
starting example... json strings 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.
Comments
Post a Comment