2010-03-25 161 views
2

我有一個JSON結構的一組數據:轉換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嗎?

回答

3

對於Java,您可以使用JSON.org中的json-simple。正如其他人所說,我不認爲有這樣一種「聰明」的方式,你只需要將JSON轉換爲真實的對象,操縱並轉換回來。 (見下文)另外我相信你必須引用文字字符串,例如。 「TASK1」,「標籤」,「數據」爲它是有效的JSON(或至少,如果你不JSON-簡單也不會接受)

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]); 
} 
+1

我還沒有嘗試Java代碼片段,但Javascript代碼真棒:) –

+0

我不是真正的Javascript專家,所以我敢打賭有一個更優雅的方式來做到這一點... –

2

首先你需要解析JSON來獲得真實的物體。

使用JavaScript,您可以只使用eval()它,或使用JSON.parse()。有一個在JSON.org一個JSON實施沒有這個內置的。

對於Java(一種完全不同的語言)的瀏覽器,JSON.org也有一個JSON解析器,你可以使用的實現。

一旦你把對象拿出來,你可以重新安排,直到你的心臟的內容,然後JSON.stringify()(在JS)轉換回JSON。

0

嘗試Jolt。這是一個java庫,允許您在json中指定轉換。