您的问题可以分为2个子问题。
Q1:如何将下划线('_')分隔的字符串模式转换为嵌套映射。因为一旦实现了这一点,您就可以使用任何一种最流行的 Json 库(例如 Jackson 或 Gson)将映射转换为 JSON 字符串,
Q2:如何解析CSV 文件。我想已经有很多文章讨论过这个问题。
对于第一个子问题,受@Andreas 在Generate Nested Map from Path String in Java 中的回答启发,可以使用以下函数解决问题:
public static void generateNestedMap(Map<String, Object> map, String path, Object value) {
int start = 0;
for (int end; (end = path.indexOf('_', start)) != -1; start = end + 1)
map = (Map<String, Object>) map.computeIfAbsent(path.substring(start, end), k -> new HashMap<String, Object>());
map.put(path.substring(start), value);
}
然后您可以将给定的字符串和相应的值存储在映射中,Map<String, Object> result 如下所示:
代码 sn-p
Map<String, Object> result = new HashMap<>();
generateNestedMap(result, "A_aa", 1);
generateNestedMap(result, "A_ab", 2);
generateNestedMap(result, "A_ac", 3);
generateNestedMap(result, "A_ad", 4);
generateNestedMap(result, "B_BB_ba", 5);
generateNestedMap(result, "B_BB_BBB_bb", 6);
System.out.println(result.toString());
控制台输出
{A={aa=1, ab=2, ac=3, ad=4}, B={BB={BBB={bb=6}, ba=5}}}
之后,您可以使用Jackson 库轻松地将地图转换为 JSON 字符串,如下所示:
ObjectMapper mapper = new ObjectMapper();
String jsonStr = mapper.writeValueAsString(result);
System.out.println(jsonStr);
它的输出应该是:
{"A":{"aa":1,"ab":2,"ac":3,"ad":4},"B":{"BB":{"BBB":{" bb":6},"ba":5}}}
对于第二个子问题,也有很多库如OpenCSV 或Apache Commons CSV 可以处理这个问题,我不再赘述。