2010-03-25 5 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]] 
}] 

/자바?

답변

3

Java의 경우 JSON.org에서 json-simple을 사용할 수 있습니다. 다른 사람들이 말했듯이 JSON을 실제 객체로 변환하고 조작하고 다시 변환해야한다는 '영리한'방법이 있다고 생각하지 않습니다. (아래 참조) 또한 저는 여러분이 리터럴 문자열을 인용해야한다고 믿습니다. 그것은 유효한 JSON 될 (또는 그렇게하지 않으면 적어도, JSON - 간단한 그것을 수락하지 않습니다)는 "작업 1", "라벨", "데이터"여기

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

자바 스 니펫을 시도하지는 않았지만 자바 스크립트 코드는 굉장합니다 :) –

+0

자바 스크립트에 대한 전문가가 아니기 때문에 좀 더 우아한 방법이있을 것입니다. –

2

먼저 JSON을 구문 분석하여 실제 개체를 가져와야합니다.

JavaScript를 사용하면 eval() 또는 JSON.parse()을 사용할 수 있습니다. 이 내장 브라우저가없는 브라우저의 경우 JSON.org에 JSON 구현이 있습니다.

Java의 경우 완전히 다른 언어 인 JSON.org에는 사용할 수있는 JSON 구문 분석기 구현이 있습니다.

개체를 가져 오면 심장 콘텐츠까지 다시 정렬 한 다음 JSON.stringify() (JS에서)을 다시 JSON으로 변환 할 수 있습니다.

0

시도 Jolt. json에서 변환을 지정할 수있는 Java 라이브러리입니다.

관련 문제