web-dev-qa-db-ja.com

Jackson Json:配列をJsonNodeとObjectNodeに変換する方法は?

指定された従業員と会社のクラス

Company
{
    String companyName;
}

Employee
{
    String employeeName;
}

次のような私のコード

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

このような結果が得られればいいのに

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

それは簡単な質問ですが、私は非常に紛らわしいものです....特にGsonとJson ....

I COMPULSORY NEEDこのライブラリが機能する他のライブラリを提案しないでください。そして、いくつかの状況により、このクラスIS NOT私は欲しかった。

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

したがって、私は[〜#〜] manually [〜#〜]を入れ、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に感謝します。

24
Stupidfrog
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);
45
hsluo

Jackson ObjectNodeputputArrayのように使用できます

import com.fasterxml.jackson.databind.node.ObjectNode;
ArrayList<ObjectNode> employee = new ArrayList();
for(int i = 1; i < 4; i++){
  ObjectNode em = Json.newObject();
  em.put("companyName", "cName" + i);
  employee.add(em);
}
ObjectNode company = Json.newObject();
company.put("companyName", "cName");
company.putArray("employee").addAll(employee);
return Json.newObject().put("company", company);
1
transang

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);