web-dev-qa-db-fra.com

Jackson Json: comment convertir un tableau en JsonNode et ObjectNode?

Employé et classe d'entreprise

Company
{
    String companyName;
}

Employee
{
    String employeeName;
}

et mon code comme celui-ci

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

je souhaite obtenir un résultat comme celui-ci

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

C’est une question simple, mais j’en perds un peu la confusion .... surtout Gson et Json ....

S'il vous plaît ne proposez pas d'autre bibliothèque, qui i BESOIN OBLIGATOIRE cette bibliothèque fonctionne. Et en raison de certaines circonstances, cette classe IS NOT i voulait.

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

Par conséquent, j'ai besoin deMANUELLEMENTle mettre et le sérialiser en chaîne json.

EDITED: @Les classes Delimanolis déclarées est la bonne façon de concevoir la relation entre les classes. Cependant, ce n'est pas ce que je voulais.

La réponse de @hsluo est correcte! et identique à ce que @Sotirios Delimanolis mentionne. Totalement répondre à cette question.

Et j’ai trouvé un autre moyen de le faire, qui utilise Hashmap

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

et ensuite revenir à @Responbody, résultat totalement identique à la réponse de @hsluo.

ET merci @Sotirios Delimanolis, @hsluo de m'aider.

19
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);
40
hsluo

Vous pouvez utiliser les variables ObjectNode et put de jackson putArray comme

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

Pourquoi ne créez-vous pas simplement un POJO contenant un 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;
    }
}

et le sérialiser à une ObjectNode.

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