【问题标题】:Json String to Java Object with dynamic key name具有动态键名的 Json 字符串到 Java 对象
【发布时间】:2016-08-26 15:01:43
【问题描述】:

我正在尝试将这种结构的 json 字符串解析为 Java 对象,但每次尝试都失败了。

{
  "message": "Test Message",
  "status": true,
  "users": {
    "user_xy": [
      {
        "time": "2016-08-25 19:01:20.944614158 +0300 EEST",
        "age": 24,
        "props": {
          "pr1": 197,
          "pr2": 0.75,
          "pr3": 0.14,
          "pr4": -0.97
        }
      }
    ],
    "user_zt": [
      {
        "time": "2016-08-25 17:08:36.920891187 +0300 EEST",
        "age": 29,
        "props": {
          "pr1": 1.2332131860505051,
          "pr2": -0.6628148829634317,
          "pr3": -0.11622442112006928
        }
      }
    ]
  }
}

props 字段可以包含 1 个属性或 6 个属性,这取决于 db 记录。用户名部分也动态变化。

我可以用 Jackson Lib 成功解析这个结构化字符串吗?

【问题讨论】:

  • 将用户解析为 JSONArray 并进行迭代!以同样的方式解析 props 也应该有效。

标签: java json jackson


【解决方案1】:

您必须创建如下所示的 calss 结构才能将您的字符串映射到 java 对象。

为详细信息创建一个类

public class Details {
    private String message;
    private String status;
    private Map<String, List<UserDetails>> users = new HashMap<String, List<UserDetails>>();
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    public Map<String, List<UserDetails>> getUsers() {
        return users;
    }
    public void setUsers(Map<String, List<UserDetails>> users) {
        this.users = users;
    }
}

像下面这样创建 UserDetails 类。

public class UserDetails {
    private String time;
    private String age;
    private Map<String, String> prop = new HashMap<String, String>();
    public String getTime() {
        return time;
    }
    public void setTime(String time) {
        this.time = time;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public Map<String, String> getProp() {
        return prop;
    }
    public void setProp(Map<String, String> prop) {
        this.prop = prop;
    }   
}

现在您可以将字符串映射到 Details 类。

希望这会有所帮助..

【讨论】:

  • 谢谢,这真的很有帮助。但我使用Map&lt;String, UserInfo[]&gt; 而不是Map&lt;String, List&lt;UserDetails&gt;&gt;
  • 嘿,如果 userDerails 的键是动态的,我该如何映射它们
  • 感谢您提供如此简单的解释和示例,拯救了我的一天。干杯
猜你喜欢
  • 2021-03-24
  • 2021-09-04
  • 1970-01-01
  • 2021-03-20
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 2015-10-07
相关资源
最近更新 更多