gpt4 book ai didi

java - 如何从此 map 数据构造 JSON

转载 作者:行者123 更新时间:2023-12-01 12:37:56 26 4
gpt4 key购买 nike

我有一个 Map,其键和值作为链接列表,如下所示

{Ice creams=[Cone,KoolCool(21), Stick,KoolCool(25)]}

有了这个我需要构造一个以下 json

{
"name": "Ice creams",
"T2": [
{
"name": "Cone",
"T3": [
{
"name": "KoolCool",
"leaf": []
}
]
},
{
"name": "Stick",
"T3": [
{
"name": "KoolCool",
"leaf": []
}
]
}
]
}

每个逗号分隔的值都会增加 T 值

我正在尝试用下面的方法来解决这个问题

  1. 对于映射中的每个键,以 LinkedList 形式访问其值
  2. 从该 LinkedList 访问中将其拆分并构造 json

有人可以告诉我是否有更好的方法吗?

package com.util;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;
public class Test {
public static void main(String args[]) {
Map<String, LinkedList<String>> consilatedMapMap = new LinkedHashMap<String, LinkedList<String>>();
LinkedList<String> values = new LinkedList<String>();
values.add("Cone,KoolCool(21)");
values.add("Stick,KoolCool(25)");
consilatedMapMap.put("Ice creams", values);

/*
* for (Map.Entry<String, LinkedList<String>> consilMap :
* consilatedMapMap.entrySet()) {
*
* String t1Category = consilMap.getKey(); LinkedList<String>
* consiladatedList = consilMap.getValue();
*
*
* for(int i=0;i<consiladatedList.size();i++) { String result =
* consiladatedList.get(i);
*
* String spliter[] = result.split(",");
*
* for(int j=0;j<spliter.length;j++) { System.out.println(spliter[j]); }
*
* }
*
* }
*/


}

}

最佳答案

我相信你把这个复杂化了 - 自动增量名称... JSON 结构与 Java 结构不匹配... JSON 部分由对象结构生成,部分由解析其中的字符串生成...即使你说“每个逗号分隔的值都会增加 T 值”,从示例来看这显然是不正确的。

尽管如此...这是可能的 - 即使只使用 org.json (不知道为什么人们一直建议 GSON 作为解决方案...)

这里的主要思想是为您需要生成的每个部分创建一个方法,并在需要时传递“level”以生成适当的“Tn”属性。

public class Test {

private static JSONObject processString(String data, int level) throws JSONException {
JSONObject json = new JSONObject();
int index = data.indexOf(',');
String name = data;
String remainder = "";
if (index < 0) {
index = name.indexOf('(');
if (index > 0) {
name = data.substring(0, index);
}
} else {
name = data.substring(0, index);
remainder = data.substring(name.length() + 1);
}
json.put("name", name);

JSONArray a = new JSONArray();
if (remainder.length() > 0) {
a.put(processString(remainder, level + 1));
json.put("T" + level, a);
} else {
json.put("leaf", a);
}
return json;
}

private static JSONArray processList(List<String> list, int level) throws JSONException {
JSONArray json = new JSONArray();
for (String data : list) {
json.put(processString(data, level));
}
return json;
}

private static JSONObject processMap(Map<String>, List<String>> map, int level) throws JSONException {
JSONObject json = new JSONObject();
for (String key : map.keySet()) {
json.put("name", key);
json.put("T" + level, processList(map.get(key), level + 1));
}
return json;
}

public static void main(String args[]) {
Map<String, List<String>> consilatedMapMap = new LinkedHashMap<String, List<String>>();
List<String> values = new LinkedList<String>();
values.add("Cone,KoolCool(21)");
values.add("Stick,KoolCool(25)");
consilatedMapMap.put("Ice creams", values);

try {
int level = 2;
JSONObject json = processMap(consilatedMapMap, level);
} catch(JSONException x) {
x.printStackTrace();
System.exit(-1);
}
}

关于java - 如何从此 map 数据构造 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25404859/

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