当前位置: 首页 > 知识库问答 >
问题:

在Java中删除Json字符串中的重复项?

景光赫
2023-03-14

我有一个具有重复值的Json字符串:

String json = "{\"Sign_In_Type\":\"Action\",\"Sign_In_Type\":\"Action\"}";

   try {
            JSONObject json_obj = new JSONObject(json);
            String type = json_obj.getString("Sign_In_Type");
        } catch (JSONException e) {
            throw new RuntimeException(e);
        }
Exception in thread "main" java.lang.RuntimeException: org.json.JSONException: Duplicate key "Sign_In_Type"
    at com.campanja.app.Upload.main(Upload.java:52)
Caused by: org.json.JSONException: Duplicate key "Sign_In_Type"
    at org.json.JSONObject.putOnce(JSONObject.java:1076)
    at org.json.JSONObject.(JSONObject.java:205)
    at org.json.JSONObject.(JSONObject.java:402)
    at com.campanja.app.Upload.main(Upload.java:49)
 Set set = new HashSet(Arrays.asList(json));

但这给了我:

[{"Sign_In_Type":"Action","Sign_In_Type":"Action"}]

欢迎提出任何建议,谢谢!

共有1个答案

夏涵畅
2023-03-14

我可以马上想到两个选择:

  • 使用wither regex或令牌解析字符串,将每个键值对添加到hashmap中,最后在删除重复项的情况下重新创建JSON文档。但是,在本例中,我只删除完全相同的键值对。
  • 下载org.json.jsonObject的源代码,并对代码进行轻微修改以自动删除重复代码。不过这有点危险。另一个选择是创建一个修改后的版本,只需验证和修改。

下面的代码允许您使用包含重复键的字符串创建JSONOBbject。只有当您有两个键值时才会引发异常--它们具有相同的键,但值不同。这是因为我认为随机选择这两个中的哪一个应该被赋值是一个问题(例如,后面的值?)。当然,这可以根据您的意愿进行更改(例如,为多个键保留最后一个值)。

修改类

import org.json.JSONException;
import org.json.JSONObject;


public class JSONObjectIgnoreDuplicates extends JSONObject {

     public JSONObjectIgnoreDuplicates(String json) {
        super(json);
    }

    public JSONObject putOnce(String key, Object value) throws JSONException {
            Object storedValue;
            if (key != null && value != null) {
                if ((storedValue = this.opt(key)) != null ) {
                    if(!storedValue.equals(value))                          //Only through Exception for different values with same key
                        throw new JSONException("Duplicate key \"" + key + "\"");
                    else
                        return this;
                }
                this.put(key, value);
            }
            return this;
        }
}

主要方法

String json = "{\"Sign_In_Type\":\"Action\",\"Sign_In_Type\":\"Action\"}";
           try {
                JSONObject json_obj = new JSONObjectIgnoreDuplicates(json);
                String type = json_obj.getString("Sign_In_Type");
            } catch (JSONException e) {
                throw new RuntimeException(e);
            }   
 类似资料:
  • 我试图遍历一个字符串以删除重复的字符。 例如,字符串应该变成,字符串应该变成

  • 问题内容: 我试图遍历一个字符串,以删除重复的字符。 例如字符串应该成为 和字符串应该成为 这是我到目前为止的内容: 做这个的最好方式是什么? 问题答案: 将字符串转换为char数组,并将其存储在中。这样可以保留你的订购,并删除重复的商品。就像是:

  • 问题内容: 我有像这样的字符串“ aaaabbbccccaaddddcfggghhhh”,我想删除重复的字符,得到像这样的字符串“ abcadcfgh”。 一个简单的实现是: 使用正则表达式是否可能有更好的实现? 问题答案: 你可以这样做: 正则表达式使用反向引用和捕获组。 正常的正则表达式是,但是您必须在Java中使用另一个反斜杠来使反斜杠转义。 如果您想要重复的字符数: 演示版

  • 我需要编写一个静态方法,该方法将作为参数,并返回一个新的。例如,如果我将“Maaaakkee”作为输入,它将返回“make”。我已经尝试了下面的代码,但它似乎没有显示最后一个字符。下面是我的代码:

  • 我需要对一个字符串进行预处理,并从中移除一些单词。我要找的东西是这样的:- 我是新的编程,所以请考虑。

  • 问题内容: 任何人都可以让我知道如何从中删除重复的值 和输出应该像 使用Java 任何帮助,将不胜感激。 问题答案: 只需一行即可: 输出: 请注意,订单已保留:) 关键点是: 给我们不同的值作为数组 把数组变成一个列表 保留唯一性 和 插入顺序-它完成为我们提供唯一值的所有工作,这些值通过构造函数传递 该列表是 最后的命令从 此解决方案要求这些值不包含字符序列,这是此类简洁代码的合理要求。 Ja