Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jackson Json:如何将数组转换为JsonNode和ObjectNode?_Java_Javascript_Json_Jackson - Fatal编程技术网

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

Java Jackson Json:如何将数组转换为JsonNode和ObjectNode?,java,javascript,json,jackson,Java,Javascript,Json,Jackson,给定员工和公司级别 Company { String companyName; } Employee { String employeeName; } 我的代码如下 List<Employee> e = new ArrayList<Employee>(); ..... ..... 这是一个很简单的问题,但我对一些事情很困惑。。。。 特别是Gson和Json 请不要建议其他图书馆,因为我必须使用该图书馆。 由于某些情况,这门课不是我想要的 Compan

给定员工和公司级别

Company
{
    String companyName;
}

Employee
{
    String employeeName;
}
我的代码如下

List<Employee> e = new ArrayList<Employee>();
.....
.....
这是一个很简单的问题,但我对一些事情很困惑。。。。 特别是Gson和Json

请不要建议其他图书馆,因为我必须使用该图书馆。 由于某些情况,这门课不是我想要的

Company
{
    String companyName;
    List<Employee> employees;
}
公司
{
字符串公司名称;
列出员工名单;
}
因此,我需要手动将其放入,并序列化为json字符串

编辑: @Sotirios Delimanolis类声明是设计 上课。然而,这不是我想要的

Company
{
    String companyName;
    List<Employee> employees;
}
@hsluo的回答是正确的!和@Sotirios Delimanolis提到的一样。完全完成这个问题

我找到了另一种方法,使用Hashmap

HashMap k = new HashMap();
List<employee> y = new ArrayList<employee>();
y......
k.put("records", y);
k.put("total", total);
HashMap k=newhashmap();
列表y=新的ArrayList();
Y
k、 投入(“记录”,y);
k、 投入(“总计”,总计);
然后返回@Responbody,结果与@hsluo的回答完全相同


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

您可以创建一个包含
列表的POJO

ObjectMapper mapper=new ObjectMapper();
列表e=新的ArrayList();
arraynodearray=mapper.valueToTree(e);
ObjectNode companyNode=mapper.valueToTree(公司);
companyNode.putArray(“员工”).addAll(数组);
JsonNode result=mapper.createObjectNode().set(“company”,companyNode);

您可以使用jackson
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);
import com.fasterxml.jackson.databind.node.ObjectNode;
ArrayList employee=新的ArrayList();
对于(int i=1;i<4;i++){
ObjectNode em=Json.newObject();
em.put(“公司名称”、“cName”+i);
添加(em);
}
ObjectNode company=Json.newObject();
公司名称(“公司名称”、“cName”);
公司。putArray(“员工”)。addAll(员工);
返回Json.newObject().put(“company”,company);
List yourList=new ArrayList();
((ObjectNode)someNode.set(“listname”,this.objectMapper.valueToTree(yourList));

感谢您的帮助,但是这些类不是我想要的,因为我想要返回一个自定义JSON字符串,使用@ResponseBody、company和employee只是一个示例。因此,在我的例子中,我希望像这样返回
{totalUser:20,user:[{…},{…}]
,而不创建新的类。@stupidprog
ObjectNode
class一系列
put
方法,在其中可以向JSON对象添加字段。然后可以调用
toString()
在最后一个
ObjectNode
上,在
@ResponseBody
注释的方法中返回
字符串
。嗨,我可以问一下如何将2个JsonNode组合成1个对象。从上面的示例中,假设公司有另一个名为location的属性。如何实现它?我想你可以使用
put
ya,经过测试,如果put String或int,then JsonNode totalNode=mapper.createObjectNode().put(“total”,total).set(“records”,array);但如何设置2个数组?我的意思是获得另一个名为records2的属性…将另一个链式
set
调用添加到
ObjectNode
应该可以。请注意这些API的返回值,我知道,当我调用
set
时,它将作为JsonNode返回,因此我只能调用
set
1次…dear@daniel alonso虽然这正确地回答了标题中的问题,但它并没有解决问题细节中描述的挑战-当然,你可以理直气壮地说,标题不适合这里;-)然而,我仍然认为,我们应该始终努力理解我们真正需要的帮助,因此w我可以给你一个答案,谢谢你的关注也许,我只是误解了你的答案,那么也许你可以在你的答案中多加一点解释你真正的意思;-)在你的答案中加一点解释,而不是只给出代码片段,这是一个很好的做法。答案很短或只是代码会自动标记为版主这个答案看起来很有希望,但背后的逻辑解释是必要的。
Employees e = new Employees();
List<Employee> employees = new ArrayList<Employee>();
e.setEmployees(employees);
ObjectNode objectNode = mapper.valueToTree(e);
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);
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);
JsonNode result = new ObjectMapper().readTree(e.toString());
List<String> yourList = new ArrayList<>();
((ObjectNode) someNode).set("listname", this.objectMapper.valueToTree(yourList));