我应该如何使用Jackson JSON中的数字对象键解析JSON

时间:2014-02-13 16:16:48

标签: java json jackson

我刚刚开始使用Jackson JSON解析器,我很喜欢它,但是我遇到了一个我正在尝试解析的JSON对象的问题。

这是我目前的java代码:

public class resetPassword {
    private String id;
    private String key1;
    private String key2;


    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id= id;
    }

    public String getKey1() {
        return key1;
    }

    public void setKey1(String key1) {
        this.key1= key1;
    }

    public String getKey2() {
        return key2;
    }

    public void setKey2(String key2) {
        this.key2= key2;
    }
}

我如何解析杰克逊这样的事情:

{
   "1":{
      "key1":"val",
      "key2":"val"
   },
   "2":{
     "key":"val",
     "key":"val"
     }, .. etc
}

任何有关这方面的帮助都会被大肆宣传

2 个答案:

答案 0 :(得分:4)

根据评论中的信息,我猜你需要将遍历与数据绑定结合起来。

首先,使用traversal,使用JsonNode获取{"key1": ..., "key2": ...}个对象。 伪代码(未测试):

    ObjectMapper mapper = new ObjectMapper();
    JsonNode root = mapper.readTree(genreJson);
    Iterator<String> fieldNames = root.fieldNames();
    while (fieldNames.hasNext()) {
        String fieldName = fieldNames.next();
        JsonNode node = root.get(fieldName);
        // now you should have {"key1": ...} in node
    }

然后对找到的每个节点使用data binding

ResetPassword item = mapper.readValue(node, ResetPassword.class);

答案 1 :(得分:1)

如果您需要快速方式,可以将其设置为Map;

ObjectMapper mapper = new ObjectMapper();

Map<String, Map<String, String>> map = mapper.readValue(br, Map.class);
System.out.println(map);

您的map现在是:

{1={key1=val, key2=val}, 2={key1=val, key2=val}}

您可以迭代Map(s)并相应地设置ResetPassword

PS: br 是我的BufferedReader个实例,它会读取放置在json中的numeric.txt

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("numeric.txt"),    "UTF-8"));