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

2024-01-19

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



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

当我尝试创建 JSONObject 时,它会正确抛出异常:




   try {
            JSONObject json_obj = new JSONObject(json);
            String type = json_obj.getString("Sign_In_Type");
        } catch (JSONException e) {
            throw new RuntimeException(e);
        }
  

Error:



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)
  

在将其转换为 JSONOBject 之前,是否有一种智能方法可以删除或检查重复项? 我尝试创建:



 Set set = new HashSet(Arrays.asList(json));
  

但这给了我:



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

欢迎任何建议,谢谢!


我立刻就能想到两个选择:

  • 使用 wither 正则表达式或标记解析字符串,将每个键值对添加到哈希映射中,最后重新创建 JSON 文档并删除重复项。在这种情况下,我只会删除完全相同的键值对。
  • 下载源代码org.json.JSONObject,并对代码进行轻微修改以自动忽略重复项。但这有点危险。另一种选择是创建一个仅进行验证和修改的修改版本。

扩展 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);
            }   
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Java 中的 Json 字符串中删除重复项? 的相关文章

随机推荐