通过Gson获取Json的值

问题描述 投票:0回答:2

我没有得到containerStatuses的名称。我尝试了这一点(关于先前的帖子),该错误在get(“ name”)上报告为“该类型的JsonElement的get(String)方法未定义”。

感谢您的帮助

JsonObject data = new Gson().fromJson(myjsoncontent, JsonObject.class);
JsonArray items = data .get("items").getAsJsonArray();      
    for(JsonElement element : items){
         JsonObject object = element.getAsJsonObject();
         String containerstatusesname = object.get("status").getAsJsonObject().get("containerStatuses").getAsJsonArray().get(0).get("name").getAsString();
}

// My Json Content

{
    "kind": "Space",
    "apiVersion": "v1",
    "metadata": {
        "selfLink": "something",
        "resourceVersion": "something"
    },
    "items": [
        {
            "status": {
                "containerStatuses": [
                 {
                   "name": "thisismyname"
                 }
                ]               
            }
        } 
    ]
}
java arrays json spring-boot gson
2个回答
0
投票

您为什么使用gson模拟JSON.parse?

[使用JSON.parse获取JsonObject:

JsonObject data = JSON.parse(myjsoncontent);
JsonArray items = data.get("items").getAsJsonArray();      
    for(JsonElement element : items){
         JsonObject object = element.getAsJsonObject();
         JsonArray containerstatuses = object.get("status").getAsJsonObject().get("containerStatuses").getAsJsonArray().get(0).get("name").getAsString();
}

如果要改用gson,则应创建一个与json数据匹配的类,作为:

public class ApiResponse {

    private String kind;
    private String apiVersion;
    private Metadata metadata;
    private List<Item> items;

    class Metadata {
        private String selfLink;
        private String resourceVersion;
    }

    class Item {
        private List<StatusContainer> status;
    }

    class StatusContainer {
        private String name;
    }
}

然后执行:

ApiResponse response = gson.fromJson(myjsoncontent, ApiResponse.class);

这样,响应对象将包含已解析的json的所有数据。


0
投票

您必须更改

.get(0).get("name")

.get(0).getAsJsonObject().get("name")

JsonArray在您对其进行迭代时返回JsonElement s


0
投票
object.get("status").getAsJsonObject().get("containerStatuses").getAsJsonArray().get(0).getAsJsonObject().get("name").getAsString();
© www.soinside.com 2019 - 2024. All rights reserved.