【问题标题】:Convert JSON structure转换 JSON 结构
【发布时间】:2011-01-31 16:04:22
【问题描述】:

我在一个 JSON 结构中有一组数据:

[[task1, 10, 99],  
[task2, 10, 99],  
[task3, 10, 99],  
[task1, 11, 99],  
[task2, 11, 99],  
[task3, 11, 99]] 

并需要将其转换为另一种 JSON 结构:

[{  
  label: "task1",  
  data: [[10, 99], [11, 99]]  
},  
{   
  label: "task2",  
  data: [[10, 99], [11, 99]] 
},  
{  
  label: "task3",  
  data: [[10, 99], [11, 99]]
}]

用 javascript/java 最好的方法是什么?

【问题讨论】:

    标签: java javascript json


    【解决方案1】:

    对于 Java,您可以使用来自 JSON.org 的 json-simple。我不认为有一种“聪明”的方法可以做到这一点,正如其他人所说,您只需将 JSON 转换为真实对象,操作并转换回来。 (见下文)我也相信你必须引用文字字符串,例如。 "task1", "label", "data" 使其成为有效的 JSON(或者至少,如果你不这样做,json-simple 不会接受它)

        package com.another;
    
    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.Map;
    import org.json.simple.JSONArray;
    import org.json.simple.JSONObject;
    import org.json.simple.parser.JSONParser;
    import org.json.simple.parser.ParseException;
    
    public class NewClass {
    
        public static final String inputString = "[ [\"task1\", 10, 99],   [\"task2\", 10, 99],   [\"task3\", 10, 99],   [\"task1\", 11, 99],   [\"task2\", 11, 99],   [\"task3\", 11, 99]]";
    
        public static void main(String[] args) throws ParseException {
            JSONArray obj = (JSONArray) new JSONParser().parse(inputString);
            Map<Object, JSONObject> output = new HashMap<Object, JSONObject>();
            for (Object o : obj) {
                JSONArray item = (JSONArray) o;
                Object title = item.get(0);
                Object first = item.get(1);
                Object second = item.get(2);
                JSONObject dest = output.get(title);
                if (dest == null) {
                    dest = new JSONObject();
                    output.put(title, dest);
                    dest.put("label", title);
                    dest.put("data", new JSONArray());
                }
                JSONArray data = new JSONArray();
                data.add(first);
                data.add(second);
                ((JSONArray) dest.get("data")).add(data);
            }
            String outputString = JSONArray.toJSONString(Arrays.asList(output.values().toArray()));
            System.out.println(outputString);
        }
    }
    

    这里是JS

    var inputString = "[ [\"task1\", 10, 99],   [\"task2\", 10, 99],   [\"task3\", 10, 99],   [\"task1\", 11, 99],   [\"task2\", 11, 99],   [\"task3\", 11, 99]]";
    
    var obj = JSON.parse(inputString);
    var output = new Object();
    for (var i in obj) {
        var item = obj[i];
        var title = item[0];
        var first = item[1];
        var second = item[2];
        var dest = output[title];
        if (dest == null) {
            dest = {
                "label" : title,
                "data": new Array()
                };
            output[title] = dest;
        }
        dest.data.push([first, second]);
    }
    var outputArray = new Array();
    for (var t in output) {
        outputArray.push(output[t]);
    }
    

    【讨论】:

    • 我没试过Java sn-p,但是Javascript代码很棒:)
    • 我并不是真正的 Javascript 专家,所以我敢打赌有一种更优雅的方式来做到这一点......
    【解决方案2】:

    首先您需要解析 JSON 以获取真实对象。

    使用 JavaScript,您可以只使用 eval() 它,或者使用 JSON.parse()JSON.org 有一个 JSON 实现,适用于没有内置此功能的浏览器。

    对于 Java(一种完全不同的语言),JSON.org 也有一个您可以使用的 JSON 解析器的实现。

    从其中取出对象后,您可以重新排列,直到您满意为止,然后 JSON.stringify()(在 JS 中)转换回 JSON。

    【讨论】:

      【解决方案3】:

      试试Jolt。它是一个 java 库,允许您在 json 中指定转换。

      【讨论】:

        猜你喜欢
        • 2022-01-05
        • 2021-12-10
        • 1970-01-01
        • 1970-01-01
        • 2018-11-07
        • 2015-12-11
        • 2020-11-17
        • 1970-01-01
        • 2017-10-01
        相关资源
        最近更新 更多