C.A*_*C.A 6 java json duplicate-removal
我有一个重复值的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"}]
欢迎任何建议,谢谢!
我立刻就能想到两个选择:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
主要方法
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12512 次 |
| 最近记录: |