gpt4 book ai didi

java - 在 Android Studio 中将嵌套 JSON 反序列化为 Java

转载 作者:行者123 更新时间:2023-12-01 17:34:13 24 4
gpt4 key购买 nike

我正在尝试反序列化this JSONMural 类的 Java 对象数组,并将它们显示在我的应用程序的列表(回收器 View )中。下面是 JSON 的格式化示例,其中仅包含我需要的数据。

{
"records": [{
"recordid": "e6b10b2f7cadbe7caec9a0b36e9e7b570c3add50",
"fields": {
"auteur_s": "Dupa",
"photo": {
"id": "7cd8a2bc799826835057eaec21a28730",
},
"annee": "1994",
"coordonnees_geographiques": [50.8527886675,
4.34530735016],
"personnage_s": "Cubitus - Dommel"
},
},
...
]
}

我使用Okhttp发出请求,响应成功,所以我用它构造一个JSONObject。我遍历该对象中的 "records" 数组,因为这是我找到所需所有数据的地方。具有字符串或数组作为值的键工作正常,我可以将它们加载到应用程序的回收器 View 中,但是当我想要访问 "photo" 时,即嵌套在另一个对象中的键:值对,我收到 JSONException org.json.JSONException: No value for photo 并且我的 Recycler View 返回空。

代码如下:

private void fetchMurals(){
threadExecutor.execute(new Runnable() {
@Override
public void run() {
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
.url("https://bruxellesdata.opendatasoft.com/api/records/1.0/search/?dataset=comic-book-route&rows=58")
.get()
.build();
try{
Response response = client.newCall(request).execute();
String json = response.body().string();

JSONObject jsonObject = new JSONObject(json);
JSONArray jsonRecordsArray = jsonObject.getJSONArray("records");

int arraySize = jsonRecordsArray.length();
muralArrayList = new ArrayList<>();

for (int i = 0; i < arraySize; i++){
String jsonID = jsonRecordsArray.getJSONObject(i).getString("recordid");
JSONObject jsonMural = jsonRecordsArray.getJSONObject(i).getJSONObject("fields");
JSONObject jsonMuralPhoto = jsonMural.getJSONObject("photo");

final Mural currentMural = new Mural(
jsonID,
(jsonMural.has("auteur_s")) ? jsonMural.getString("auteur_s") : "Unknown Author",
(jsonMuralPhoto.has("id")) ? jsonMuralPhoto.getString("id") : "No picture available!",
(jsonMural.has("personnage_s")) ? jsonMural.getString("personnage_s") : "Unknown character",
(jsonMural.has("annee")) ? jsonMural.getString("annee") : "Unknown year of creation",
new LatLng(jsonMural.getJSONArray("coordonnees_geographiques").getDouble(0),
jsonMural.getJSONArray("coordonnees_geographiques").getDouble(1))
);
muralArrayList.add(currentMural);

} catch (IOException e){
e.printStackTrace();
}
});
}

我已经尝试了很多变体,但到目前为止还没有奏效。会不会是我的循环有问题?或者使用我正在调用的 jsonMural.getJSONObject("photo")

最佳答案

我现在看到我正在检查我的记录是否有“id”字段,而我应该检查它是否有“照片”。我将构造函数中的行更改为

(jsonArtwork.has("photo")) ? jsonArtwork.getJSONObject("photo").getString("id") : "No picture available!"

现在可以使用。

关于java - 在 Android Studio 中将嵌套 JSON 反序列化为 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61070090/

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