Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.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 将列表转换为JSON_Java_Json - Fatal编程技术网

Java 将列表转换为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

我从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),它使用数组创建一个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行。为此,您首先需要迭代对象数组对象[]然后需要以这样一种方式填充映射,它将在列表下包含所有重复的对象。因此,我已经在我的答案中添加了一条内联注释。