gpt4 book ai didi

java - 在 Java 中映射到 JSON

转载 作者:行者123 更新时间:2023-11-30 04:46:00 25 4
gpt4 key购买 nike

我有一张这样的 map map :

{ 
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},
facility-kind3={param1=XPath-1, param2=XPath-2}
}
}

我想将其转换为这样的 JSON 格式

[

{"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?

最佳答案

您需要将 JSON 转换为您提供的新格式。

要转换的数据:

static String json = 
"{\n" +
" facility-1={\n" +
" facility-kind1={param1=XPath-1, param2=XPath-2},\n" +
" facility-kind2={param1=XPath-1, param2=XPath-2},\n" +
" facility-kind3={param1=XPath-1, param2=XPath-2}\n" +
" },\n" +
" facility-2={\n" +
" facility-kind1={param1=XPath-1, param2=XPath-2},\n" +
" facility-kind2={param1=XPath-1, param2=XPath-2},\n" +
" facility-kind3={param1=XPath-1, param2=XPath-2}\n" +
" }\n" +
"}\n";

使用 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;
}
}

下一步是查看源代码并创建它的表示。我会使用:

Map<String, Map<String, Map<String, String>>>

因为输入数据是这样布局的。现在使用 Gson 转换它非常简单:

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));
}
<小时/>

使用 JSONObject/JSONArray
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));
}

关于java - 在 Java 中映射到 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10925874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com