【发布时间】:2016-07-09 14:05:56
【问题描述】:
我有一个 JSON 对象,而不是一个 JSON 数组, 我想获取值并创建新的 JSON 对象并再次放入 JSON 数组。
这里我的 JSONObject 叫做 response
{"data":
[{
"level":"lv1",
"name_indo":"Telinga",
"name_eng":"Ear",
"detail_indo":"Telinga adalah alat indra yang memiliki fungsi untuk mendengar suara yang ada di sekitar kita.\r\n",
"detail_eng":"The ear is the sensory apparatus that has a function to hear the sounds that are around us .\r\n",
"image_url":"\/append_img\/telinga.png”},
{
“level":"lv1",
"name_indo":"Gigi",
"name_eng":"Tooth",
"detail_indo":"Gigi adalah alat yang digunakan untuk mengolah makanan saat kita makan.\r\n",
"detail_eng":"Gigi is a tool used to process food when we eat.\r\n",
"image_url":"\/append_img\/gigi.png"}]
}
这是我的代码,用于制作仅包含 name_engstrong> 值和 image_url 值的新 JSON 数组:
try {
JSONArray resultArr = response.getJSONArray("data");
JSONObject filterJson = null;
JSONArray filterArr = null;
for (int i = 0; i < resultArr.length(); i++) {
Log.v(TAG, "run for");
JSONObject finalObj = (JSONObject) resultArr.get(i);
String name_eng = finalObj.getString("name-eng");
filterJson = new JSONObject();
filterJson.put("name_eng", name_eng);
filterArr = new JSONArray();
filterArr.put(filterJson);
}
JSONObject fixedJSON = new JSONObject();
assert filterArr != null;
fixedJSON.put("data", filterArr.toString());
Log.v(TAG, "filterarray : "+fixedJSON);
} catch (JSONException e) {
e.printStackTrace();
}
这是我的 LogCat 错误:
03-22 23:50:42.864 10867-10867/tk.partofbodyapp.partofbodyapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: tk.partofbodyapp.partofbodyapp, PID: 10867
java.lang.NullPointerException: Attempt to invoke virtual method 'org.json.JSONArray org.json.JSONArray.put(java.lang.Object)' on a null object reference
at tk.partofbodyapp.partofbodyapp.startgameActivity$startJson.onPostExecute(startgameActivity.java:191)
at tk.partofbodyapp.partofbodyapp.startgameActivity$startJson.onPostExecute(startgameActivity.java:88)
at android.os.AsyncTask.finish(AsyncTask.java:636)
at android.os.AsyncTask.access$500(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
错误startgameActivity.java:191是filterArr.put(filterJson);
我想再次制作一个 JSON 谎言:
{"data":
[{
"name_eng":"Ear",
"image_url":"\/append_img\/telinga.png”},
{
"name_eng":"Tooth",
"image_url":"\/append_img\/gigi.png"}]
}
有什么想法吗?
【问题讨论】:
-
我认为问题出在其他地方。我尝试了
JSONObject jsonObject = new JSONObject(yourJson),它抛出了 JsonToken.syntaxError。挖掘了一段时间后,我发现它无法解析 image_url 字段中的“\\/”。可能这就是你得到 NullPointerException 的原因。 -
必须!你的 json 有问题。
.... "image_url":"\/append_img\/telinga.png [ ” ] }, { [ “ ] level":"lv1",[ ] 中的字符应该是引号 (") 但有所不同。如果将它们更改为引号,它们将很容易解析并且不会抛出空指针。 -
我试图只得到
name_eng,但仍然有同样的问题。我认为这与儿子的结构无关。 -
我已经尝试过我发布的解决方案,我想这也对你有用。 :) 让我知道是否可以提供更多帮助。
标签: java android arrays json android-studio