diff --git a/hutool-json/src/main/java/cn/hutool/json/InternalJSONUtil.java b/hutool-json/src/main/java/cn/hutool/json/InternalJSONUtil.java index f0c448f90..52cf59582 100755 --- a/hutool-json/src/main/java/cn/hutool/json/InternalJSONUtil.java +++ b/hutool-json/src/main/java/cn/hutool/json/InternalJSONUtil.java @@ -218,11 +218,11 @@ public final class InternalJSONUtil { JSONObject nextTarget = target.getJSONObject(segment); if (nextTarget == null) { nextTarget = new JSONObject(target.getConfig()); - target.setOnce(segment, nextTarget, predicate); + target.set(segment, nextTarget, predicate); } target = nextTarget; } - target.setOnce(path[last], value, predicate); + target.set(path[last], value, predicate); return jsonObject; } @@ -318,7 +318,7 @@ public final class InternalJSONUtil { public static Writer quote(final String str, final Writer writer, final boolean isWrap) throws IORuntimeException { try { return doQuote(str, writer, isWrap); - } catch (IOException e) { + } catch (final IOException e) { throw new IORuntimeException(e); } } diff --git a/hutool-json/src/main/java/cn/hutool/json/JSONConfig.java b/hutool-json/src/main/java/cn/hutool/json/JSONConfig.java index 811b63347..e6922a1da 100755 --- a/hutool-json/src/main/java/cn/hutool/json/JSONConfig.java +++ b/hutool-json/src/main/java/cn/hutool/json/JSONConfig.java @@ -43,6 +43,10 @@ public class JSONConfig implements Serializable { * 是否去除末尾多余0,例如如果为true,5.0返回5 */ private boolean stripTrailingZeros = true; + /** + * 是否检查重复key + */ + private boolean checkDuplicate; /** * 创建默认的配置项 @@ -211,4 +215,26 @@ public class JSONConfig implements Serializable { this.stripTrailingZeros = stripTrailingZeros; return this; } + + /** + * 是否检查多个相同的key + * + * @return 是否检查多个相同的key + * @since 5.8.5 + */ + public boolean isCheckDuplicate() { + return checkDuplicate; + } + + /** + * 是否检查多个相同的key + * + * @param checkDuplicate 是否检查多个相同的key + * @return this + * @since 5.8.5 + */ + public JSONConfig setCheckDuplicate(boolean checkDuplicate) { + this.checkDuplicate = checkDuplicate; + return this; + } } diff --git a/hutool-json/src/main/java/cn/hutool/json/JSONObject.java b/hutool-json/src/main/java/cn/hutool/json/JSONObject.java index 95a75a919..49ce8dcdb 100755 --- a/hutool-json/src/main/java/cn/hutool/json/JSONObject.java +++ b/hutool-json/src/main/java/cn/hutool/json/JSONObject.java @@ -198,7 +198,7 @@ public class JSONObject extends MapWrapper implements JSON, JSON */ @Override public Object put(final String key, final Object value) throws JSONException { - return put(key, value, null, false); + return put(key, value, null, getConfig().isCheckDuplicate()); } /** @@ -210,7 +210,7 @@ public class JSONObject extends MapWrapper implements JSON, JSON * @throws JSONException 值是无穷数字抛出此异常 */ public JSONObject set(final String key, final Object value) throws JSONException { - put(key, value, null, false); + set(key, value, null); return this; } @@ -224,8 +224,8 @@ public class JSONObject extends MapWrapper implements JSON, JSON * @throws JSONException 值是无穷数字、键重复抛出异常 * @since 5.8.0 */ - public JSONObject setOnce(final String key, final Object value, final Predicate> predicate) throws JSONException { - put(key, value, predicate, true); + public JSONObject set(final String key, final Object value, final Predicate> predicate) throws JSONException { + put(key, value, predicate, getConfig().isCheckDuplicate()); return this; } diff --git a/hutool-json/src/main/java/cn/hutool/json/JSONParser.java b/hutool-json/src/main/java/cn/hutool/json/JSONParser.java index 6e5eff067..a82d126a1 100755 --- a/hutool-json/src/main/java/cn/hutool/json/JSONParser.java +++ b/hutool-json/src/main/java/cn/hutool/json/JSONParser.java @@ -74,7 +74,7 @@ public class JSONParser { throw tokener.syntaxError("Expected a ':' after a key"); } - jsonObject.setOnce(key, tokener.nextValue(), predicate); + jsonObject.set(key, tokener.nextValue(), predicate); // Pairs are separated by ','.