Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将JSON反序列化为映射<;字符串,对象>;使用Jackson的成员变量?_Java_Json_Jackson - Fatal编程技术网

Java 如何将JSON反序列化为映射<;字符串,对象>;使用Jackson的成员变量?

Java 如何将JSON反序列化为映射<;字符串,对象>;使用Jackson的成员变量?,java,json,jackson,Java,Json,Jackson,我有一些JSON要映射到我的框对象: { "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"

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

  {
      "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"
  }
我的
对象看起来像:

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

    public Box() {
        // Blank
    }

    // Getter and setter for `json` field
}
我不断地发现这个错误:

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:未识别字段“created_date”(class com.me.Box),未标记为可忽略(一个已知属性:“json”)

我在网上找到的所有示例都只是将JSON反序列化为一个简单的POJO,其中包含少量
String
int
成员变量。如何正确地将JSON映射到我的
JSON
字段,并使其正确运行


我可以想象,一旦这个方法起作用,
json.get(“id”)
将返回
12345
,而
json.get(“值”)
将返回另一个
Map
(或
Map
)。我还不熟悉使用Jackson,所以这也可能不是我想做的事情的正确方式。任何帮助都将不胜感激

我认为您需要向构造函数添加带注释的参数。比如说,

public Box(@JsonProperty("json") Map<String, Object> json) {
    // TODO
}
public框(@JsonProperty(“json”)映射json){
//待办事项
}

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

您也可以执行以下操作:

ObjectMapper mapper = new ObjectMapper();
Map<String, Object> map = mapper.readValue(JSON_STRING, new TypeReference<Map<String, String>>(){});
box.setJsonMap(map);
例如,对象->Json

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

GSON将填充box中的所有字段,以匹配JSON字符串中的键、值对。如果你不想这样做,请忽略此项,但这是另一种选择

TypeReference
with
import com.fasterxml.jackson.core.type.TypeReference@lucas crawford,如果以后要再次设置映射,则不需要实例化它。
Gson gson = new Gson();
Box box = gson.fromJson(JSON_STRING, Box.class);
Gson gson = new Gson();
String str = gson.toJson(mBox); //mBox is some box object