gpt4 book ai didi

android - org.json.JSONObject$1 类型的 'json key object' 处的值 null 无法转换为 JSONObject

转载 作者:行者123 更新时间:2023-11-29 18:52:44 27 4
gpt4 key购买 nike

我正在尝试解析这个 JSON:

{
"data": [{
"name": "Griya Legita",
"is_broken": false,
"is_repaired": false,
"is_ok": true,
"asset_parent": null
},
{
"name": "4th Floor",
"is_broken": true,
"is_repaired": false,
"is_ok": false,
"asset_parent": {
"name": "Buni Building",
"is_broken": true,
"is_repaired": false,
"is_ok": false
}
}]
}

此 JSON 在 JSON 数组中有一个 JSON 对象。但是当我调用 JSON 对象时,它说它无法转换。

这是我试过的代码:

class daftarAset extends AsyncTask < String, String, String > {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(getActivity());
pDialog.setMessage("LOADING...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}

@Override
protected String doInBackground(String...params) {
String link_url = "https://example.com/api/assets";
HttpHandler sh = new HttpHandler();
String json = sh.makeServiceCall(link_url);

Log.e(TAG, "Response from url: " + json);
if (json != null) {
try {
JSONObject jsonObject = new JSONObject(json);
JSONArray data = jsonObject.getJSONArray("data");
for (int i = 0; i < data.length(); i++) {
JSONObject ar = data.getJSONObject(i);
String aset = ar.getString("name");

JSONObject parent = ar.getJSONObject("asset_parent");
String nama = parent.getString("name");
HashMap map = new HashMap();
map.put(in_aset, aset);
map.put(in_ruang, nama);
data_map.add(map);
}
} catch (final JSONException e) {
Log.e(TAG, "Json parsing error: " + e.getMessage());
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getActivity().getApplicationContext(),
"Json parsing error: " + e.getMessage(),
Toast.LENGTH_LONG).show();
}
});
}
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
list = (ListView) getView().findViewById(R.id.baik_list);
adapter = new AssetsAdapter(getActivity(), data_map);
list.setAdapter(adapter);
setListViewHeightBasedOnChildren(list);

}
});
}
return null;
}

@Override
protected void onPostExecute(String s) {
pDialog.dismiss();
}

我不知道我的代码出了什么问题。我正在关注 this tutorial我觉得它一定是正确的,但它有一个错误,因为无法转换 JSON。

这是我的错误:

W/System.err: org.json.JSONException: Value null at asset_parent of type org.json.JSONObject$1 cannot be converted to JSONObject
at org.json.JSON.typeMismatch(JSON.java:100)
at org.json.JSONObject.getJSONObject(JSONObject.java:613)
at com.mqa.android.monas.Fragment.BaikFragment$daftarAset.doInBackground(BaikFragment.java:188)
at com.mqa.android.monas.Fragment.BaikFragment$daftarAset.doInBackground(BaikFragment.java:162)
at android.os.AsyncTask$2.call(AsyncTask.java:292)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)

最佳答案

首先确保JSONObject包含asset_parent键并且对应的键值不为空。然后从 JSONObject 中检索值。

使用此代码:

      JSONObject jsonObject = new JSONObject(json);
JSONArray data = jsonObject.getJSONArray("data");
for (int i = 0; i < data.length(); i++) {
JSONObject ar = data.getJSONObject(i);
String aset = ar.getString("name");

HashMap map = new HashMap();
map.put(in_aset, aset);

if(ar.has("asset_parent") && !ar.isNull("asset_parent") ){
JSONObject parent = ar.getJSONObject("asset_parent");
String name = parent.getString("name");
map.put(in_ruang, name );
}else{
map.put(in_ruang, null );
}

Log.i("Test", "Map: " + map.toString());
data_map.add(map);
................
.............
}

希望它能解决您的问题。如果您的问题已解决,请告诉我。

关于android - org.json.JSONObject$1 类型的 'json key object' 处的值 null 无法转换为 JSONObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50596457/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com