【问题标题】:Mapping Json string to map or hashmap field in java将 Json 字符串映射到 java 中的 map 或 hashmap 字段
【发布时间】:2012-03-06 09:43:31
【问题描述】:

假设我从服务器返回了以下 JSON 字符串:

{
    "response":{
        "imageInstances":{
            "one":{
                "id":"1",
                "url":"ONE"
            },         
            "two":{
                "id":"2",
                "url":"TWO"
            }
        }
    }  
}

在 codehaus Jackson @JsonProperty 中,我如何从中获取 HashMap 对象?

import org.codehaus.jackson.annotate.JsonAnySetter;
import org.codehaus.jackson.annotate.JsonProperty;

import java.util.HashMap;
import java.util.List;

public class MSShow {
  @JsonProperty("imageInstances") private HashMap<String, Temp> images;//// HOW DO YOU CONVERT IT TO HASH MAP??????
  @JsonAnySetter public void ignoredField(String key, Object value) { }

  private class Temp {
    @JsonProperty("id") private String id;
    @JsonProperty("url") private String url;
    @JsonAnySetter public void ignoredField(String key, Object value) { }
    }
}

归根结底,我希望根据返回的 JSON 字符串生成的哈希图是 (用java伪写)

如果我打电话,应该返回一个带有字段 id=1url=ONE 的 Temp 对象

images.get("one")

如果我打电话,应该返回一个带有字段 id=2url=TWO 的 Temp 对象

images.get("two") 

【问题讨论】:

  • 没有进行任何认真的钻研或测试,但是,首先,我会说杰克逊可能对您的嵌套类 Temp 存在问题 a) 私有,b) 内部类(非静态,因此绑定到包含MediaSlideShow 的实例)。所以我会先制作Temppublic static
  • 您是否特别需要HashMap?如果没有,请考虑使用Map&lt;String, Temp&gt;,让 Jackson 担心要使用什么实现。
  • 谢谢芽!谢谢你的回复

标签: java json dictionary jackson


【解决方案1】:

这应该可以按原样进行,只需稍作修改:您正在使用额外的“响应”条目。所以通常你会使用一个包装器 POJO,比如:

class Wrapper {
  public MSShow response;
}

正确映射结构。或者您可以使用UNWRAP_ROOT_VALUE 功能(来自DeserializationConfig)自动执行此操作,但如果需要,类的名称需要匹配。

如果字段类型是那个(它是),结果确实是HashMap。如果不是,您也可以使用:

@JsonDeserialize(as=HashMap.class)

强制使用特定的子类型。

【讨论】:

    猜你喜欢
    • 2020-02-23
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    相关资源
    最近更新 更多