Подтвердить что ты не робот

Джексон 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"}
                ]
              }
}

Это простой вопрос, однако я довольно запутываю что-то... Особенно Гссона и Джсона....

Пожалуйста, не предлагайте другую библиотеку, для которой мне нужна эта библиотека. И из-за каких-то обстоятельств этого класса я НЕ хотел.

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

Поэтому мне нужно MANUALLY поставить его и сериализовать в строку json.

EDITED: объявленные классы @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, чтобы помочь мне.

4b9b3361

Ответ 1

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

Ответ 2

Насколько я могу судить, у Джексона нет класса JsonObject.

Почему бы вам просто не создать POJO, содержащий List<Employee>

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

Ответ 3

Вы можете использовать ObjectNode put и putArray как

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