转换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执行此操作的最佳方法是什么?
对于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
这是在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中指定转换。