gpt4 book ai didi

java - 将 JSON 数组值存储在 HashMap 中并删除重复项

转载 作者:行者123 更新时间:2023-11-30 02:40:23 24 4
gpt4 key购买 nike

我有一个 JSON 响应,看起来像这样(它因用户而异)

{
"success": true, "data":
[
{
"mandatory_tag": "My Company",
"id": "topic_1408946825893148"
},
{
"mandatory_tag": "Partners",
"id": "topic_1408946942491149",
},
{
"mandatory_tag": "Industry",
"id": "topic_1408946996510150",
},
{
"mandatory_tag": "Competitors",
"id": "topic_1409210454810358",
},
{
"mandatory_tag": "Competitors",
"id": "topic_1408947133657152"
},
{
"mandatory_tag": "Competitors",
"id": "topic_1408947071457151",
},
{
"mandatory_tag": "Competitors",
"id": "topic_1409210621754362",
},
{
"mandatory_tag": "Competitors",
"id": "topic_1409210704390363",
},
{
"mandatory_tag": "Competitors",
"id": "topic_1409210794791364"
}
]
}

我正在解析它并尝试将其存储在 HashMap 中,但键值重复。谁能建议我如何将具有相同 mandatory_tag 的所有 id 存储在一个数组中?

我是新手所以请考虑..谢谢

                  try
{
JSONObject jsonMain = new JSONObject(jsonString);
JSONArray dataArray = jsonMain.getJSONArray("data");
for(int i = 0; i < dataArray.length(); i++)
{
JSONObject tagObject = dataArray.getJSONObject(i);
String mandatory_tag = tagObject.getString("mandatory_tag");
String id = tagObject.getString("id");
List<String> arrayID = new ArrayList<String>();
if(myMap.containsKey(mandatory_tag))
{
arrayID.add(id);
myMap.put(mandatory_tag, arrayID);
} else
{
List<String> newArrayID = new ArrayList<String>();
newArrayID.add(id);
myMap.put(mandatory_tag, newArrayID);
}
}

好吧,我现在卡在这上面了..请有什么好的逻辑..

最佳答案

HashMap 允许您存储键值项。我建议 HashMap 的类型为 <String,List<String>>所以允许您存储具有相同 mandatory_tag 的项目在 1 个键下的同一列表中。

例如

HashMap<String,List<String>> myMap = new HashMap<String,List<String>>();

if (myMap.containsKey(mandatory_tag)) {
List<String> values = myMap.get(mandatory_tag);
if (values!=null) {
values.add(id)
} else {
values = new List<String>();
values.add(id);
}
}

更新

正如我在下面的评论中所写,您添加的 except 有错误

List<String> arrayID = new ArrayList<String>();
if(myMap.containsKey(mandatory_tag))
{
arrayID.add(id);
myMap.put(mandatory_tag, arrayID);
}

你在这里做的是,如果 map 已经包含键,你正在用一个只包含 1 个值的新列表替换与键关联的值。您需要做的是更新现有值的列表。检查下面的代码并确保您了解问题所在。这些是编程的基础知识,您需要了解您正在做的事情的逻辑才能推进。

//Somewhere you have declared your HashMap
HashMap<String,List<String>> myMap = new HashMap<String,List<String>>();

//then we continue with your excerpt
try {
JSONObject jsonMain = new JSONObject(jsonString);
JSONArray dataArray = jsonMain.getJSONArray("data");


for(int i = 0; i < dataArray.length(); i++) {
JSONObject tagObject = dataArray.getJSONObject(i);
String mandatory_tag = tagObject.getString("mandatory_tag");
String id = tagObject.getString("id");

if(myMap.containsKey(mandatory_tag)) {
List<String> arrayID = myMap.get(mandatory_tag);
arrayID.add(id);
} else {
List<String> newArrayID = new ArrayList<String>();
newArrayID.add(id);
myMap.put(mandatory_tag, newArrayID);
}

关于java - 将 JSON 数组值存储在 HashMap 中并删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25843919/

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