反序列化内部JSON对象

时间:2013-09-30 14:32:28

标签: java json jackson

我有一个POJO课程

Class Pojo {
String id;
String name;
//getter and setter
}

我有一个喜欢

的json
{
    "response" : [
        {
            "id" : "1a",
            "name" : "foo"
        }, 
        {
            "id" : "1b",
            "name" : "bar"
        }
    ]
}

我使用Jackson ObjectMapper进行反序列化。如何在不创建任何其他父类的情况下获取List<Pojo>

如果不可能,是否可以得到仅包含json字符串第一个元素的Pojo对象,即本例id="1a"name="foo"

3 个答案:

答案 0 :(得分:3)

首先需要获取数组

String jsonStr = "{\"response\" : [ { \"id\" : \"1a\",  \"name\" : \"foo\"},{ \"id\" : \"1b\",\"name\" : \"bar\"  } ]}";
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(jsonStr);
ArrayNode arrayNode = (ArrayNode) node.get("response");
System.out.println(arrayNode);
List<Pojo> pojos = mapper.readValue(arrayNode.toString(), new TypeReference<List<Pojo>>() {});

System.out.println(pojos);

打印(使用toString()

[{"id":"1a","name":"foo"},{"id":"1b","name":"bar"}] // the json array 
[id = 1a, name = foo, id = 1b, name = bar] // the list contents

答案 1 :(得分:1)

您可以将通用readTree与JsonNode一起使用:

ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(json);
JsonNode response = root.get("response");
List<Pojo> list = mapper.readValue(response, new TypeReference<List<Pojo>>() {});

答案 2 :(得分:0)

#include<iostream>
#include<string>

int main() {
  const char clearCh = ' ';
  const char fillCh = '*';
  const size_t size = 6;

  std::string str(size, clearCh);

  for (int i = str.size() - 1; i >= 0; --i) {
    str[i] = fillCh;
    std::cout << str << std::endl;
  }

  for (int i = 0; i < str.size() - 1; ++i) {
    str[i] = clearCh;
    std::cout << str << std::endl;
  }

  return 0;
}

首先,您必须使用JSON文件创建一个JSON节点。现在您有了一个JSON节点。您可以像我一样使用JSON节点的路径功能转到所需的位置

Pojo pojo;
json = {
    "response" : [
        {
            "id" : "1a",
            "name" : "foo"
        }, 
        {
            "id" : "1b",
            "name" : "bar"
        }
    ]
}
ObjectMapper mapper = new ObjectMapper();
JsonNode root = objectMapper.readTree(json);
pojo = objectMapper.readValue(root.path("response").toString(),new TypeReference<List<Pojo>>() {});

但是,这将返回JSON树。为了创建一个字符串,我使用了toString方法。 现在,您有一个如下所示的字符串 ” [         {             “ id”:“ 1a”,             “ name”:“ foo”         },         {             “ id”:“ 1b”,             “ name”:“ bar”         }     ]“ 您可以按如下所示将此字符串与JSON数组映射

root.path("response")