java - 将无法识别的json数据反序列化为Map JacksonJson

标签 java json spring jackson resttemplate

我有一个示例类

public class Category {
private String id ;
    private String name ;

private String description ;

private String image ;

private String thumbnail ;
 private Map<String, String> custom ;
}

我收到了来自服务器的响应,格式如下,但为了举例说明,我们假设它位于文件 cat.json 中

{"id":"mens","name":"Mens","c__showInMenu":true,"c__enableCompare":false}

   1 ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
   2 Category cat= mapper.readValue(new File("cat.json"), Category.class);

这对于 id、name 等字段来说效果非常好。 如何编写自定义反序列化器,以便将 json 中以 c_ 开头的任何字段推送到 Map 自定义中?

我对 Jackson 很陌生,正在使用 Springs Rest 模板并将其配置为使用 org.springframework.http.converter.json.MappingJacksonHttpMessageConverter

最佳答案

您可能只想使用 @JsonAnySetter .

import java.io.File;
import java.util.HashMap;
import java.util.Map;

import org.codehaus.jackson.annotate.JsonAnySetter;
import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
import org.codehaus.jackson.annotate.JsonMethod;
import org.codehaus.jackson.map.ObjectMapper;

public class JacksonFoo
{
  public static void main(String[] args) throws Exception
  {
    ObjectMapper mapper = new ObjectMapper().setVisibility(JsonMethod.FIELD, Visibility.ANY);
    Category category = mapper.readValue(new File("cat.json"), Category.class);
    System.out.println(category);
    // output:
    // Category: id=mens, name=Mens, description=null, image=null, thumbnail=null, custom={c__showInMenu=true, c__enableCompare=false}
  }
}

class Category
{
  private String id;
  private String name;
  private String description;
  private String image;
  private String thumbnail;
  private Map<String, String> custom;

  @JsonAnySetter
  void addSomething(String name, String value)
  {
    if (custom == null) custom = new HashMap();
    custom.put(name, value);
  }

  @Override
  public String toString()
  {
    return String.format("Category: id=%s, name=%s, description=%s, image=%s, thumbnail=%s, custom=%s", 
        id, name, description, image, thumbnail, custom);
  }
}

关于java - 将无法识别的json数据反序列化为Map JacksonJson,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8699111/

相关文章:

java - 如何在eclipse链接@Query注释中使用表达式(SpEL)?

java - 什么是NullPointerException,我该如何解决?

java - 如何在声明泛型的ArrayList中添加多个对象?

javascript - 使用 Phaser 制作迷宫的平铺 map 编辑器

java - 一个 .put 中包含多个 JsonObject

java - 如何在 Spring Boot 中将图像文件保存在 src/main/resources/images 中?

java - 在 Spring Web 服务中创建一个新线程

java - 使用泊松分布生成一个范围内的随机数

java - Android在父类xml中声明textview并在子类中设置监听器

json - 使用 jackson-dataformat-xml 自定义根元素的 XML 反序列化?