我有以下字符串JSON代码:的Android的JSONObject洗牌
json = new JSONObject(
"{\"Questions\":{"
+ "\"1\":[\"ELSYS\",\"ELSYS2\",\"ELSYS3\",\"ELSYS4\"],"
+ "\"2\":[\"1024\",\"2048\",\"512\",\"64\"],"
+ "\"3\":[\"RANDOM1\",\"RANDOM2\",\"RANDOM3\",\"RANDOM4\"],"
+ "\"4\":[\"A DOG1\",\"A DOG2\",\"A DOG3\",\"A DOG4\"],"
+ "\"5\":[\"SOME WORD1\",\"SOME WORD2\",\"SOME WORD3\",\"SOME WORD4\"]}}");
正确初始化后,我打印JSON的logcat的:
Log.i(TAG, json.toString());
我的问题是,JSON啮合起来。这是输出:
{"Questions":{"3":["RANDOM1","RANDOM2","RANDOM3","RANDOM4"],"2":["1024","2048","512","64"],"1":["ELSYS","ELSYS2","ELSYS3","ELSYS4"],"5":["SOME WORD1","SOME WORD2","SOME WORD3","SOME WORD4"],"4":["A DOG1","A DOG2","A DOG3","A DOG4"]}}
而且更可读这里是从JSON解析信息:
key => 3 || value => RANDOM1,RANDOM2,RANDOM3,RANDOM4
key => 2 || value => 1024,2048,512,64
key => 1 || value => ELSYS,ELSYS2,ELSYS3,ELSYS4
key => 5 || value => SOME WORD1,SOME WORD2,SOME WORD3,SOME WORD4
key => 4 || value => A DOG1,A DOG2,A DOG3,A DOG4
正如你所看到的字符串是不正确的顺序。我在普通的Java程序中尝试了相同的代码,并且它正常工作。我在android中这样做的问题在那里。你知道可能是什么问题吗? (我试图清理项目),而不是 “{”
UPDATE
尝试 “[”。以下异常被抛出:
10-02 18:49:09.985: W/System.err(2263): org.json.JSONException: Unterminated array at character 18 of {"Questions":["1":["ELSYS","ELSYS2","ELSYS3","ELSYS4"],"2":["1024","2048","512","64"],"3":["RANDOM1","RANDOM2","RANDOM3","RANDOM4"],"4":["A DOG1","A DOG2","A DOG3","A DOG4"],"5":["SOME WORD1","SOME WORD2","SOME WORD3","SOME WORD4"]]}
10-02 18:49:09.985: W/System.err(2263): at org.json.JSONTokener.syntaxError(JSONTokener.java:450)
10-02 18:49:09.985: W/System.err(2263): at org.json.JSONTokener.readArray(JSONTokener.java:440)
10-02 18:49:09.985: W/System.err(2263): at org.json.JSONTokener.nextValue(JSONTokener.java:103)
10-02 18:49:09.985: W/System.err(2263): at org.json.JSONTokener.readObject(JSONTokener.java:385)
10-02 18:49:09.985: W/System.err(2263): at org.json.JSONTokener.nextValue(JSONTokener.java:100)
10-02 18:49:09.985: W/System.err(2263): at org.json.JSONObject.<init>(JSONObject.java:154)
10-02 18:49:09.985: W/System.err(2263): at org.json.JSONObject.<init>(JSONObject.java:171)
10-02 18:49:09.985: W/System.err(2263): at com.tarasoft.shop.HTTPRequests$SendRequest.doInBackground(HTTPRequests.java:36)
10-02 18:49:09.985: W/System.err(2263): at com.tarasoft.shop.HTTPRequests$SendRequest.doInBackground(HTTPRequests.java:1)
10-02 18:49:09.985: W/System.err(2263): at android.os.AsyncTask$2.call(AsyncTask.java:287)
10-02 18:49:09.985: W/System.err(2263): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
10-02 18:49:09.985: W/System.err(2263): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
10-02 18:49:09.985: W/System.err(2263): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
10-02 18:49:09.985: W/System.err(2263): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
10-02 18:49:09.985: W/System.err(2263): at java.lang.Thread.run(Thread.java:856)
更新2 你应该知道,这些键“1”,“2”等,也可以是字符串太多,所以我不使用它们来排序的JSON,我使用唯一的来查看订单是否正确。将不会有这些“1”,“2”等字符串。
add()给出错误。你的意思是put()? – definera 2014-10-02 19:48:24
啊对不起,在arrayList和json之间有点混淆。已编辑答案 – Chris 2014-10-02 19:53:13
是的,这有效,但也许我不够清楚。我需要这些字符串的密钥。你会看到这些“1024”,“512”,“64”等。他们的关键应该是一个字符串。洞的想法是,我对每个问题都有疑问和可能的答案。像这儿。如果我有这样的问题:“2^6的结果是什么”,答案应该是这些“1024”,“512”,“64”中的一个。 – definera 2014-10-02 20:04:06