映射到Java中的JSON
我有一张这样的地图 地图: 我想把它转换成JSON格式,如下所示映射到Java中的JSON,java,json,Java,Json,我有一张这样的地图 地图: 我想把它转换成JSON格式,如下所示 [ {"title": "Item 1"}, {"title": "Folder 2", "children": [ {"title": "Sub-item 2.1"}, {"title": "Sub-item 2.2"} ] }, {"title": "Folder 3", "children": [
[
{"title": "Item 1"},
{"title": "Folder 2",
"children": [
{"title": "Sub-item 2.1"},
{"title": "Sub-item 2.2"}
]
},
{"title": "Folder 3",
"children": [
{"title": "Sub-item 3.1"},
{"title": "Sub-item 3.2"}
]
},
{"title": "Item 5"}
]
我尝试使用GSON,但结果并不是我想要的:
{
"facility-1": {
"facility-kind1":
{"param1":"XPath-1","param2":"XPath-2"},
"facility-kind2":
{"param1":"XPath-1","param2":"XPath-2"},
"facility-kind3":
{"param1":"XPath-1","param2":"XPath-2"}
},
"facility-2": {
"facility-kind1":
{"param1":"XPath-1","param2":"XPath-2"},
"facility-kind2":
{"param1":"XPath-1","param2":"XPath-2","param3":"XPath-3"},
"facility-kind3":
{"param1":"XPath-1","param2":"XPath-2"}
}
}
如何将json格式化为我想要的格式???您想要的是漂亮的打印
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = gson.toJson(yourMap);
你想要的是漂亮的印刷品
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = gson.toJson(yourMap);
您需要将JSON转换为您提供的新格式 要转换的数据: 使用GSON 创建一些要处理数据的类,它们可以是:
static class Facility {
List<Kind> children = new LinkedList<Kind>();
}
static class Kind {
String title;
Map<String, String> params;
public Kind(String title, Map<String, String> params) {
this.title = title;
this.params = params;
}
}
使用JSONObject/JSONArray
publicstaticvoidmain(String…args)引发异常{
JSONObject源=新的JSONObject(json);
JSONArray destination=新的JSONArray();
for(迭代器keys=source.keys();keys.hasNext();){
String facilityName=(字符串)键。下一步();
JSONObject种类=source.getJSONObject(facilityName);
JSONArray children=新的JSONArray();
for(迭代器kit=kinds.keys();kit.hasNext();){
字符串种类=(字符串)kit.next();
JSONObject参数=种类。getJSONObject(种类);
JSONObject kindObject=新的JSONObject();
kindObject.put(“标题”,kind);
for(迭代器pit=params.keys();pit.hasNext();){
String param=(String)pit.next();
kindObject.put(param,params.get(param));
}
儿童。放置(实物);
}
JSONObject facility=新的JSONObject();
设施名称(“名称”,设施名称);
设施。放置(“儿童”,儿童);
目的地(设施);
}
System.out.println(destination.toString(2));
}
您需要将JSON转换为您提供的新格式
要转换的数据:
使用GSON
创建一些要处理数据的类,它们可以是:
static class Facility {
List<Kind> children = new LinkedList<Kind>();
}
static class Kind {
String title;
Map<String, String> params;
public Kind(String title, Map<String, String> params) {
this.title = title;
this.params = params;
}
}
使用JSONObject/JSONArray
publicstaticvoidmain(String…args)引发异常{
JSONObject源=新的JSONObject(json);
JSONArray destination=新的JSONArray();
for(迭代器keys=source.keys();keys.hasNext();){
String facilityName=(字符串)键。下一步();
JSONObject种类=source.getJSONObject(facilityName);
JSONArray children=新的JSONArray();
for(迭代器kit=kinds.keys();kit.hasNext();){
字符串种类=(字符串)kit.next();
JSONObject参数=种类。getJSONObject(种类);
JSONObject kindObject=新的JSONObject();
kindObject.put(“标题”,kind);
for(迭代器pit=params.keys();pit.hasNext();){
String param=(String)pit.next();
kindObject.put(param,params.get(param));
}
儿童。放置(实物);
}
JSONObject facility=新的JSONObject();
设施名称(“名称”,设施名称);
设施。放置(“儿童”,儿童);
目的地(设施);
}
System.out.println(destination.toString(2));
}
你是在问如何包含whiespace吗?我希望子元素在“children:[…]”下,这可能有点离题,但如果你想预打印JSON,可以尝试我不想预打印“我希望子元素在”“children:[…]”下。”然后重新写下你的问题,你会得到很多好的答案。。。没人能猜到!:)你是在问如何包含whiespace吗?我希望孩子们在“children:[…]”下,这可能有点离题,但如果你想预打印JSON,你可以尝试我不想预打印“我希望子元素在”children:[…]”下,然后重新写下你的问题,你会得到很多好的答案。。。没人能猜到!:)我希望孩子们在“children”下:“[…]”我希望孩子们在“children”[…]”下:“{”出口压力油(S_12448/2)”:“prod3653_2/S_12448/2”,“进口压力油(S_12862/2)”:“prodml653_1/S_12862/2”中没有得到内部孩子}您能提供一些完整的示例数据吗?似乎您有某种重复的内部子项定义。不像您在问题中提供的。[{“标题”:“项目1”},{“标题”:“文件夹2”,“isFolder”:true,“键”:“文件夹2”,“子项”:[{“标题”:“子项2.1”,“子项”:[{“标题”:“分项2.1.1”、“参数”:“某物”}、{“标题”:“分项2.2.1”}、{“标题”:“分项2.2”}]}、{“标题”:“文件夹3”、“isFolder”:true、“键”:“文件夹3”、“子项”:[{“标题”:“分项3.1”}、{“标题”:“分项3.2”}、{“标题”:“项目5”}]这就是我想要o/P的方式,但输入是什么?您问题中提供的输入与例如“文件夹”和“键”无关。我没有在“children[“tag”params:{“output pressure Oil(S_12448/2)”:“prod3653_2/S_12448/2”,“input pressure Oil(S_12862/2)”:“prodml653_1/S_12862/2”}您能提供一些完整的示例数据吗?似乎您有某种递归的内部子项定义。不像您在问题中提供的那样。[{“标题”:“项目1”},{“标题”:“文件夹2”,“isFolder”:true,“键”:“文件夹2”,“子项”:[{“标题”:“子项2.1”,”子项:[{“标题”:“分项2.1.1”,“参数”:“某物”},{“标题”:“分项2.2.1”},{“标题”:“分项2.2”}]},{“标题”:“文件夹3”,“isFolder”:true,“键”:“文件夹3”,“子项”:[{“标题”:“分项3.1”},{“标题”:“分项3.2”},{“标题”},},{“标题”},{“:“第5项”}]这就是我想要的o/p但输入是什么?您问题中提供的输入与例如“文件夹”和“键”无关。
Map<String, Map<String, Map<String, String>>>
public static void main(String... args) throws Exception {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
Type type = new TypeToken<
Map<String, Map<String, Map<String, String>>>>() {}.getType();
Map<String, Map<String, Map<String, String>>> source =
gson.fromJson(json, type);
Map<String, Facility> dest = new HashMap<String, Facility>();
for (String facilityName : source.keySet()) {
Map<String, Map<String, String>> facility = source.get(facilityName);
Facility f = new Facility();
for (String kindName : facility.keySet())
f.children.add(new Kind(kindName, facility.get(kindName)));
dest.put(facilityName, f);
}
System.out.println(gson.toJson(dest));
}
public static void main(String... args) throws Exception {
JSONObject source = new JSONObject(json);
JSONArray destination = new JSONArray();
for (Iterator<?> keys = source.keys(); keys.hasNext(); ) {
String facilityName = (String) keys.next();
JSONObject kinds = source.getJSONObject(facilityName);
JSONArray children = new JSONArray();
for (Iterator<?> kit = kinds.keys(); kit.hasNext(); ) {
String kind = (String) kit.next();
JSONObject params = kinds.getJSONObject(kind);
JSONObject kindObject = new JSONObject();
kindObject.put("title", kind);
for (Iterator<?> pit = params.keys(); pit.hasNext(); ) {
String param = (String) pit.next();
kindObject.put(param, params.get(param));
}
children.put(kindObject);
}
JSONObject facility = new JSONObject();
facility.put("title", facilityName);
facility.put("children", children);
destination.put(facility);
}
System.out.println(destination.toString(2));
}