Jackson Json:如何将数组转换为JsonNode和ObjectNode?

时间:2014-04-10 03:19:08

标签: java javascript json jackson

鉴于员工和公司类

Company
{
    String companyName;
}

Employee
{
    String employeeName;
}

和我的代码如下

List<Employee> e = new ArrayList<Employee>();
.....
.....

我希望我能得到像这样的结果

{
    "company":{ 
                "companyName":"cName",
                "Employee":[
                    {"employeeName":"myName1"},
                    {"employeeName":"myName2"},
                    {"employeeName":"myName3"}
                ]
              }
}

这是一个简单的问题,但是我很困惑...... 特别是Gson和Json ......

请不要提出其他图书馆,我 强制需要 这个图书馆工作。 由于某些情况,我希望这个课程 不是

Company
{
    String companyName;
    List<Employee> employees;
}

因此我需要 手动 放置它,并序列化为json字符串。

编辑: 的 @Sotirios Delimanolis类声明是设计关系的正确方法 类。但是,那不是我想要的。

来自@hsluo的答案是正确的!和@Sotirios Delimanolis提到的相同。完全满足这个问题。

我确实找到了另一种使用Hashmap

的方法
HashMap k = new HashMap();
List<employee> y = new ArrayList<employee>();
y......
k.put("records", y);
k.put("total", total);

然后返回@Responbody,结果与@hsluo回答完全相同。

感谢@Sotirios Delimanolis,@ hsluo帮助我。

5 个答案:

答案 0 :(得分:43)

ObjectMapper mapper = new ObjectMapper();
List<Employee> e = new ArrayList<Employee>();
ArrayNode array = mapper.valueToTree(e);
ObjectNode companyNode = mapper.valueToTree(company);
companyNode.putArray("Employee").addAll(array);
JsonNode result = mapper.createObjectNode().set("company", companyNode);

答案 1 :(得分:1)

您只需创建包含List<Employee>

的POJO即可
class Employees {
    @JsonProperty("Employee")
    private List<Employee> employees;

    public List<Employee> getEmployees() {
        return employees;
    }

    public void setEmployees(List<Employee> employees) {
        this.employees = employees;
    }
}

并将其序列化为ObjectNode

Employees e = new Employees();
List<Employee> employees = new ArrayList<Employee>();
e.setEmployees(employees);
ObjectNode objectNode = mapper.valueToTree(e);

答案 2 :(得分:1)

您可以使用jackson ObjectNode的{​​{1}}和put

putArray

答案 3 :(得分:1)

List<String> yourList = new ArrayList<>();
((ObjectNode) someNode).set("listname", this.objectMapper.valueToTree(yourList));

答案 4 :(得分:0)

getUserDetails(username): Observable<any> {
    const headers = new HttpHeaders({
      'Content-Type': 'application/json',
      // tslint:disable-next-line: object-literal-key-quotes
      'Authorization': sessionStorage.getItem('token'),
    });
    // tslint:disable-next-line: object-literal-shorthand
    console.log(`http://localhost:8080/users/` + username, { headers: headers });
    return this.http.get(`http://localhost:8080/users/` + username, { headers: headers }).pipe(
      map(
        userData => {
          console.log(userData);
          return userData;
        }
      ));
  }