【问题标题】:How to read value of nested json objects in java [duplicate]如何在java中读取嵌套json对象的值[重复]
【发布时间】:2017-09-29 00:11:24
【问题描述】:

我正在尝试在 java 中读取以下 json。

{
"guiCarport": {
    "width": 500,
    "depth": 500,
    "height": 230
},
"guiRoof": {
    "gableRoof": false,
    "overhang": {
        "sides": 20,
        "front": 20,
        "back": 20
    }
},
"guiShed": {
    "shed": false,
    "depth": 300,
    "doorPlacement": 0,
    "side": "Foran",
    "rotateDoor": false
}
}

到目前为止,我的 java 代码在 java servlet 中如下所示:

    String json = (String) request.getParameter("json");

    Gson gson = new Gson();
    JsonObject obj = gson.fromJson(json, JsonObject.class);

    JsonElement base = obj.get("guiCarport");
    JsonElement roof = obj.get("guiRoof");
    JsonElement shed = obj.get("guiShed");

读取对象的值并将它们分配给变量的最简单方法是什么?我为不同的对象创建了自定义类,但我需要一种首先获取值的方法。 谢谢!

【问题讨论】:

  • 为什么不能立即将其转换为自定义类而不是转换为JsonObject
  • 我该怎么做?
  • 把你的json放到这个网站jsonschema2pojo.org,选择Gson然后点击zip,它会从你的json生成java类。然后只需使用gson.fromJson(json, Example.class) (或者如果你想重命名生成的Example.java 其他东西),你的 json 将被转换为这些对象。

标签: java json gson


【解决方案1】:

您可以先将json数据转换成HashMap。这样您将获得值

  Type type = new TypeToken<Map<String, String>>(){}.getType();
  Map<String, String> myMap = gson.fromJson(jsonData, type);

【讨论】:

    【解决方案2】:

    如果您有 "guiCarport", "guiRoof""guiShed" 的自定义类。然后请制作一个像下面这样的数据持有者

    class ResponseHolder {
        private GuiCarportType guiCarport;
        private GuiRoofType guiRoof;
        private GuiShedType guiShed;
    
        //Getters and setters
    }
    

    现在您可以将响应直接解析为对象

    ResponseHolder holder = gson.fromJson(jsonData, ResponseHolder.class);

    然后您可以使用 getter 获取单个对象并依次获取它们的值。

    【讨论】:

      猜你喜欢
      • 2018-05-29
      • 2020-11-09
      • 2019-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 1970-01-01
      相关资源
      最近更新 更多