【问题标题】:Converting list to JSON [duplicate]将列表转换为 JSON [重复]
【发布时间】:2017-09-14 08:43:02
【问题描述】:

我从 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");

我想改变它,它只是遍历上面收到的列表,对于重复的键(101、102),它使用数组创建一个 jsoobject;

ex: 101 : {["Ha","De","Acr"],["YUI","HI","EX"]}

【问题讨论】:

  • 好的。但是你的问题是什么?
  • JB Nizet 我该如何转换它
  • 直接不可能,创建自定义类,属性为 id 和 list 并可以将其转换为 JSON
  • 对我来说这听起来像是一种 Map 数据类型,第一个值是键,其余的值是……值。另外,不要认为这是重复的。
  • 你期望的 json 的结构看起来像一个 Map>>。因此,通过代码创建该对象。我认为直接不可能。

标签: java json


【解决方案1】:

我尝试了以下一个并得到了预期的结果:

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

【讨论】:

  • 试试看,如果有任何困惑,请告诉我。
  • 谢谢,但我已经解决了我面临的问题。
  • 不过,我不确定您的问题陈述。请您详细说明一下?
  • 执行查询后,我在 Object [] obj 中得到以下对象; (101,“哈”,“德”,“Acr”); (102、“D”、“Forouzan”、“Mc”); (102、“Op”、“Ga”、“Wi”); (101、“YUI”、“HI”、“EX”);我想遍历上面收到的列表,并且对于重复的键(101、102),它使用数组创建一个 jsoobject。这也是您在您发布的上述程序中的输出。重点是这里我仅以 4 个列表对象为例,查询也可能返回 10 或 50 行。
  • 为此,您首先需要迭代对象数组 Object[],然后需要填充 Map>,使其包含所有重复的对象名单。因此,我已经在我的答案中加入了内联评论。
【解决方案2】:

我会尝试回答。

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

这应该可以满足您的需求! 试试看,让我知道。

【讨论】:

    【解决方案3】:

    有点不清楚您在问什么,因为您的示例输出不是有效的 JSON。我在这里假设您希望将员工标识符映射到员工列表,您可以使用Map&lt;Integer, List&lt;Employee&gt;&gt; 对其进行建模。要从此数据结构生成 JSON,您需要一个外部库,例如 Jackson JSON 库。

    假设以下Employee

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

    你会得到这个 JSON:

    { “102”:[{ “身份证”:102, “名称1”:“D”, "name2" : "Forouzan", “名称3”:“麦克” }, { “身份证”:102, “name1”:“操作”, "name2" : "嘎", “名称3”:“Wi” }], “101”:[{ “身份证”:101, "name1" : "哈", "name2" : "德", “名称3”:“Acr” }, { “身份证”:101, "name1" : "YUI", "name2" : "你好", “名称3”:“前” }] }

    代码所需的 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-16
      • 2013-05-07
      • 1970-01-01
      相关资源
      最近更新 更多