使用 Gson 获取 Json 的值

Get value of Json With Gson

我不是来获取容器状态的名称的。 我试过这个(关于先例post),在get("name") with "The method get(String) is undefined for the type JsonElement".

上报错

感谢帮助

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"
                 }
                ]               
            }
        } 
    ]
}

为什么要使用 gson 模拟 JSON.parse?正在用大锤敲坚果

如果您想使用 gson,最好创建一个 class 来匹配您的 json 数据,如:

public class ApiResponse {

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

    public List<String> getAllNames() {
        List<String> allNames = new ArrayList();
        for (Item item: items) {
            allNames.add(item.getStatus().get(0).getName());
        }
        return allNames;
    }

    public String getFirstName() {
        if (items.length == 0 || items.get(0).getStatus().length == 0) {
            return "";
        }
        return items.get(0).getStatus().get(0).getName();
    }

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

    class Item {
        private List<StatusContainer> status;

        List<StatusContainer> getStatus() {
            return status;
        }
    }

    class StatusContainer {
        private String name;

        String getName() {
            return name;
        }
    }
}

然后执行:

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

这样,响应对象将包含已解析的所有数据json。请注意,如果保持私有,您需要添加 getter 才能访问此属性。

无需模拟 JSON.parse 的结果并具有 JsonObject、JsonArray...

你必须改变

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

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

JsonArray returns JsonElement 遍历它时

将数组元素作为对象获取,因为它的结构为对象

.getAsJsonArray().get(0).getAsJsonObject().get("name").getAsString();