我在一个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执行此操作的最佳方法是什么?
答案 0 :(得分:3)
对于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]);
}
答案 1 :(得分:2)
首先,您需要解析JSON以获取真实对象。
使用JavaScript,您只需eval()
,或使用JSON.parse()
。对于没有内置的浏览器,JSON.org有一个JSON实现。
对于Java(一种完全不同的语言),JSON.org也有一个可以使用的JSON解析器的实现。
一旦你有了它的对象,你就可以重新安排直到你的心脏内容,然后JSON.stringify()
(在JS中)转换回JSON。
答案 2 :(得分:1)
试试Jolt。它是一个java库,允许您在json中指定转换。