Java 将列表转换为JSON
我从DB收到以下列表,希望将其转换为JSON:Java 将列表转换为JSON,java,json,Java,Json,我从DB收到以下列表,希望将其转换为JSON: Employee e1=new Employee(101,"Ha","De","Acr"); Employee e2=new Employee(102,"D ","Forouzan","Mc"); Employee e3=new Employee(102,"Op","Ga","Wi"); Employee e4=new Employee(101,"YUI","HI","EX"); 我想更改它,只是它转换了上面收到的列表,对于重复的键(101102
Employee e1=new Employee(101,"Ha","De","Acr");
Employee e2=new Employee(102,"D ","Forouzan","Mc");
Employee e3=new Employee(102,"Op","Ga","Wi");
Employee e4=new Employee(101,"YUI","HI","EX");
我想更改它,只是它转换了上面收到的列表,对于重复的键(101102),它使用数组创建一个JSOOObject
ex: 101 : {["Ha","De","Acr"],["YUI","HI","EX"]}
我试试答案
List<Employee> list = //Our employees
Map x = new HashMap();
for(int y = 0; y < list; y++){
x.put(list[y].value0, new Array(list[y].value1, list[y].value2, list[y].value3));
}
JSONObject json = new JSONObject();
json.putAll( x );
List=//我们的员工
Map x=新的HashMap();
对于(int y=0;y
这应该是你所需要的!
试试看,让我知道。我试了下面的一个,得到了预期的结果:
public static void main(String[] args) {
Employee e1 = new Employee(101, "Ha", "De", "Acr");
Employee e2 = new Employee(102, "D ", "Forouzan", "Mc");
Employee e3 = new Employee(102, "Op", "Ga", "Wi");
Employee e4 = new Employee(101, "YUI", "HI", "EX");
List<Employee> employeeList1 = new ArrayList<>();
employeeList1.add(e1);
employeeList1.add(e4);
List<Employee> employeeList2 = new ArrayList<>();
employeeList2.add(e2);
employeeList2.add(e3);
Map<Integer, ArrayList<Employee>> map = new HashMap<Integer, ArrayList<Employee>>();
// As of now , I have populated the map directly, but you can place some logic here for putting the values here dynamically.
map.put(101, (ArrayList<Employee>) employeeList1);
map.put(102, (ArrayList<Employee>) employeeList2);
ObjectMapper mapper = new ObjectMapper();
try {
String json = mapper.writeValueAsString(map);
System.out.println(json);
} catch (JsonProcessingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
publicstaticvoidmain(字符串[]args){
员工e1=新员工(101,“Ha”、“De”、“Acr”);
员工e2=新员工(102,“D”、“福鲁赞”、“Mc”);
员工e3=新员工(102,“Op”、“Ga”、“Wi”);
员工e4=新员工(101,“YUI”、“HI”、“EX”);
List employeeList1=新的ArrayList();
员工名单1.添加(e1);
雇员名单1.添加(e4);
List employeeList2=新建ArrayList();
雇员名单2.添加(e2);
员工名单2.添加(e3);
Map Map=newhashmap();
//到目前为止,我已经直接填充了映射,但是您可以在这里放置一些逻辑,以便动态地将值放在这里。
map.put(101,(ArrayList)员工列表1);
地图放置(102,(ArrayList)员工列表2);
ObjectMapper mapper=新的ObjectMapper();
试一试{
字符串json=mapper.writeValueAsString(map);
System.out.println(json);
}捕获(JsonProcessingException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
由于示例输出不是有效的JSON,所以您的问题有点不清楚。我在这里假设您希望将员工标识符映射到员工列表,您可以使用映射来建模。要从该数据结构生成JSON,您需要一个外部库,例如JSON库
假设以下员工
类别
public class Employee {
private final int id;
private final String name1;
private final String name2;
private final String name3;
public Employee(int id, String name1, String name2, String name3) {
this.id = id;
this.name1 = name1;
this.name2 = name2;
this.name3 = name3;
}
public int getId() {
return id;
}
public String getName1() {
return name1;
}
public String getName2() {
return name2;
}
public String getName3() {
return name3;
}
}
和封送处理代码
Employee e1 = new Employee(101,"Ha","De","Acr");
Employee e2 = new Employee(102,"D ","Forouzan","Mc");
Employee e3 = new Employee(102,"Op","Ga","Wi");
Employee e4 = new Employee(101,"YUI","HI","EX");
Map<Integer, List<Employee>> employees = new HashMap<>();
employees.put(101, Arrays.asList(e1, e4));
employees.put(102, Arrays.asList(e2, e3));
String json = new ObjectMapper().writerWithDefaultPrettyPrinter()
.writeValueAsString(employees);
System.out.println(json);
Employee e1=新员工(101,“Ha”、“De”、“Acr”);
员工e2=新员工(102,“D”、“福鲁赞”、“Mc”);
员工e3=新员工(102,“Op”、“Ga”、“Wi”);
员工e4=新员工(101,“YUI”、“HI”、“EX”);
Map employees=newhashmap();
put(101,Arrays.asList(e1,e4));
put(102,Arrays.asList(e2,e3));
字符串json=new ObjectMapper().writerWithDefaultPrettyPrinter()
.writeValueAsString(员工);
System.out.println(json);
您将得到以下JSON:
{
"102" : [ {
"id" : 102,
"name1" : "D ",
"name2" : "Forouzan",
"name3" : "Mc"
}, {
"id" : 102,
"name1" : "Op",
"name2" : "Ga",
"name3" : "Wi"
} ],
"101" : [ {
"id" : 101,
"name1" : "Ha",
"name2" : "De",
"name3" : "Acr"
}, {
"id" : 101,
"name1" : "YUI",
"name2" : "HI",
"name3" : "EX"
} ]
}
{
"102" : [ {
“id”:102,
“名称1”:“D”,
“名字2”:“福鲁赞”,
“名称3”:“Mc”
}, {
“id”:102,
“名称1”:“Op”,
“名称2”:“Ga”,
“名称3”:“Wi”
} ],
"101" : [ {
“id”:101,
“名称1”:“Ha”,
“名称2”:“De”,
“名称3”:“Acr”
}, {
“id”:101,
“名称1”:“YUI”,
“名字2”:“你好”,
“名称3”:“EX”
} ]
}
代码所需的Maven依赖项:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<!-- Jackson databinding; ObjectMapper, JsonNode and related classes are here -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
com.fasterxml.jackson.core
杰克逊核心
2.9.0
com.fasterxml.jackson.core
杰克逊数据绑定
2.9.0
好的。但是你的问题是什么?我不知道如何直接转换它。这是不可能的,创建自定义类,属性为id和list,并可以将其转换为json。对我来说,这听起来像是一种映射数据类型,第一个值是键,其余的值是…值。另外,不要认为这是重复的。y的结构我们期望的json看起来像一个映射。因此,通过代码创建该对象。我认为这是不可能的。尝试一下,如果有任何混淆,请告诉我。谢谢,但我已经回答了我所面临的问题。不过,我不确定您的问题陈述。请您详细说明一下。我在执行查询后在object[]obj中得到以下对象;(101,“Ha”、“De”、“Acr”);(102,“D”、“Forouzan”、“Mc”);(102,“Op”、“Ga”、“Wi”);(101,“YUI”、“HI”、“EX”);我想转换上述收到的列表以及重复的密钥(101、102)它使用数组创建一个JSOOObject。这也是您在上面发布的程序中的输出。要点是,这里只有4个列表对象,我举个例子,查询也可能返回10或50行。为此,您首先需要迭代对象数组对象[]然后需要以这样一种方式填充映射,它将在列表下包含所有重复的对象。因此,我已经在我的答案中添加了一条内联注释。