代码之家  ›  专栏  ›  技术社区  ›  Mark Pope

转换JSON结构

  •  2
  • Mark Pope  · 技术社区  · 16 年前

    我在一个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]]
    }]
    

    3 回复  |  直到 16 年前
        1
  •  3
  •   Peter Hull    16 年前

    对于Java,可以使用json.org中的json simple。我不认为有什么“聪明”的方法可以做到这一点,正如其他人所说,你只需要将JSON转换成真实的对象,操纵并转换回来(另外,我认为必须引用文本字符串,例如“task1”、“label”、“data”,才能使其成为有效的JSON(或者至少,如果不接受,jsonsimple不会接受它)

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

    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]);
    }
    
        2
  •  2
  •   mdm Mr. Sajid Shaikh    16 年前

    首先,您需要解析JSON以获得真正的对象。

    使用JavaScript,您可以 eval() JSON.parse() . 这里有一个JSON实现 JSON.org

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

    一旦你把东西拿出来,你就可以重新安排,直到你心满意足,然后 JSON.stringify() (在JS中)转换回JSON。

        3
  •  1
  •   Jon Lorusso    9 年前

    Jolt . 它是一个java库,允许您用json指定转换。