从Java中的Json字符串中删除重复项?
发布时间:2020-05-24 01:13:34 所属栏目:Java 来源:互联网
导读:我有一个重复值的Json字符串: String json = {Sign_In_Type:Action,Sign_In_Type:Action}; 在我尝试创建JSONObject时正确抛出异常: try { JSONObject json_obj = new JSONObject(json); St
|
我有一个重复值的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);
}
错误:
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 regex或tokens解析字符串,将每个键值对添加到hashmap,最后重新创建删除了重复项的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);
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
