簡體   English   中英

轉換JSON結構

[英]Convert JSON structure

我在一個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,您可以使用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]);
}

首先,您需要解析JSON以獲取真實對象。

使用JavaScript,您可以將其eval()或使用JSON.parse() JSON.org中有一個針對未內置此功能的瀏覽器的JSON實現。

對於Java(一種完全不同的語言), JSON.org還具有您可以使用的JSON解析器的實現。

一旦有了對象,您就可以重新排列,直到您的內心滿意為止,然后是JSON.stringify() (在JS中)以轉換回JSON。

嘗試Jolt 這是一個Java庫,可讓您在json中指定轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM