gpt4 book ai didi

java - 如何使用 Jackson 将 JSON 反序列化为 Map 成员变量?

转载 作者:搜寻专家 更新时间:2023-10-30 21:29:10 26 4
gpt4 key购买 nike

我有一些 JSON 我想映射到我的 Box对象:

  {
"created_date": "2015-11-11",
"generation_date": "2015-11-12T20:35:00+0000",
"values": {
"MORNING": 13,
"EVENING": 18,
"NOON": 446,
"NIGHT": "0.60.0"
},
"id": "12345"
}

还有我的Box对象看起来像:

public class Box {
@JsonProperty
Map<String, Object> json;

public Box() {
// Blank
}

// Getter and setter for `json` field
}

这是我的代码:

Box box = null;
// `JSON_STRING` below refers to a string of the above JSON
metricsPacket = new ObjectMapper().readValue(JSON_STRING, Box.class);

我一直收到这个错误:

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "created_date" (class com.me.Box), not marked as ignorable (one known property: "json"])

我在网上找到的所有示例都只是将 JSON 反序列化为带有少量 String 的简单 POJO。或 int成员变量。我怎样才能正确地将我的 JSON 映射到我的 json场并使其行为正确?

我想一旦这行得通 json.get("id")会返回 12345同时json.get("values")会返回另一个 Map<String, Object> (或 Map<String, String> )。我对使用 Jackson 还是陌生的,所以这甚至可能不是做我想做的事情的正确方法。任何帮助将不胜感激!

最佳答案

首先,解决您的问题。您正在尝试将 JSON 反序列化为 JSON 字符串中不存在字段的类,因此无法找到这些字段并返回异常。

您也可以执行以下操作:

ObjectMapper mapper = new ObjectMapper();
Map<String, Object> map = mapper.readValue(JSON_STRING, new TypeReference<Map<String, String>>(){});
box.setJsonMap(map);

其中 box 将有一个 setter 来设置 json 映射

或者您可以将所有字段添加到您的 Box POJO 并使用 GSON让这更容易!

例如JSON -> 对象

Gson gson = new Gson();
Box box = gson.fromJson(JSON_STRING, Box.class);

例如对象 -> JSON

Gson gson = new Gson();
String str = gson.toJson(mBox); //mBox is some box object

GSON 将填充框中的所有字段以匹配在 JSON 字符串中找到的键值对。如果您不想这样做,请忽略它,但这是另一种选择!

关于java - 如何使用 Jackson 将 JSON 反序列化为 Map<String, Object> 成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33683693/

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