gpt4 book ai didi

java - 将输入 JSON 中的键和值转换为 Guava ListMultimap?

转载 作者:行者123 更新时间:2023-11-30 07:47:40 25 4
gpt4 key购买 nike

我想编写一个 REST 服务,它将排除键值,如下所示:

LCD      Samsung
MOUSE HP
MOUSE Dell
DRINK COKE
DRINK PEPSI
LCD DELL
LCD APPLE
KEYBOARD Lenovo

接受的最佳格式是什么。如果用户以 JSON 形式发送,那么我如何将其读入

List<String, List<String>>

或进入 Guava 多 map 。

这是示例 JSON

{
"LCD": "Samsung",
"MOUSE": "HP",
"MOUSE": "DELL",
"LCD": "Apple",
"LCD": "DELL",
"DRINK": "Coke",
"LCD": "Lenovo",
"DRINK": "Pepsi",
"KEYBOARD": "Lenovo"
}

最佳答案

尽管 JSON 中存在重复键并不是无效的事情,但不建议这样做。引用这个question特别是这个 answer其中引用了 RFC,其中建议为什么不要重复。

鉴于此,将条目添加到Multimap 中的方法有点麻烦。以下代码假设您获取的 Json 对象是单行 String 格式。如果不是,转换成一个并不困难(小心换行符,下面的代码不会处理这个问题)。

    String jsonStr = new String("{\"LCD\": \"Samsung\",\"MOUSE\": \"HP\",\"MOUSE\": \"DELL\",\"LCD\": \"Apple\",\"LCD\": \"DELL\",\"DRINK\": \"Coke\",\"LCD\": \"Lenovo\",\"DRINK\": \"Pepsi\",\"KEYBOARD\": \"Lenovo\"}");

// Removing the first and last braces
jsonStr = jsonStr.substring(1, jsonStr.length() - 1);

// Create a Guava Multimap
Multimap<String, String> myMap = ArrayListMultimap.create();

// Split on comma for each key-value pair
for(String item: jsonStr.split(",")) {
// Get the individual key-value pair
String[] keyValue = item.split(":");

// Get the values between the the inverted commas
String key = keyValue[0].substring(keyValue[0].indexOf("\"") + 1, keyValue[0].lastIndexOf("\""));
String value = keyValue[1].substring(keyValue[1].indexOf("\"") + 1, keyValue[1].lastIndexOf("\""));

// Add to map
myMap.put(key, value);
}

// Print to check
for(Map.Entry<String, String> entry: myMap.entries()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}

这不是实现结果的最佳方法,但考虑到输入 JSON 的性质,我们无能为力,因为大多数 JSON 解析器(Gson、Jackson)不处理重复项。上面的代码将给出以下输出(用于检查条目的最​​终打印语句)

DRINK: Coke
DRINK: Pepsi
MOUSE: HP
MOUSE: DELL
KEYBOARD: Lenovo
LCD: Samsung
LCD: Apple
LCD: DELL
LCD: Lenovo

请注意,该顺序不是(不能)由该 map 维护。

关于java - 将输入 JSON 中的键和值转换为 Guava ListMultimap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33698792/

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