diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/convert/impl/TemporalAccessorConverter.java b/hutool-core/src/main/java/org/dromara/hutool/core/convert/impl/TemporalAccessorConverter.java index ef82a0c3b..126b42620 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/convert/impl/TemporalAccessorConverter.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/convert/impl/TemporalAccessorConverter.java @@ -151,11 +151,9 @@ public class TemporalAccessorConverter extends AbstractConverter { instant = formatter.parse(value, Instant::from); zoneId = formatter.getZone(); } else { - final Date date = DateUtil.parse(value); + final DateTime date = DateUtil.parse(value); instant = Objects.requireNonNull(date).toInstant(); - if(date instanceof DateTime){ - zoneId = ((DateTime) date).getZoneId(); - } + zoneId = date.getZoneId(); } return parseFromInstant(targetClass, instant, zoneId); } diff --git a/hutool-json/src/main/java/org/dromara/hutool/json/JSONObject.java b/hutool-json/src/main/java/org/dromara/hutool/json/JSONObject.java index 52ed0e9c1..84abb275b 100644 --- a/hutool-json/src/main/java/org/dromara/hutool/json/JSONObject.java +++ b/hutool-json/src/main/java/org/dromara/hutool/json/JSONObject.java @@ -203,9 +203,18 @@ public class JSONObject extends MapWrapper implements JSON, JSON return getOrDefault(key, defaultValue); } + @Override + public Object get(final Object key) { + Object value = super.get(key); + if(value instanceof JSONPrimitive){ + value = ((JSONPrimitive) value).getValue(); + } + return value; + } + @Override public Object getOrDefault(final Object key, final Object defaultValue) { - Object value = super.getOrDefault(key, defaultValue); + Object value = super.getOrDefault(key, defaultValue); if(value instanceof JSONPrimitive){ value = ((JSONPrimitive) value).getValue(); } diff --git a/hutool-json/src/main/java/org/dromara/hutool/json/mapper/JSONValueMapper.java b/hutool-json/src/main/java/org/dromara/hutool/json/mapper/JSONValueMapper.java index cc5a682c7..e9a53e564 100644 --- a/hutool-json/src/main/java/org/dromara/hutool/json/mapper/JSONValueMapper.java +++ b/hutool-json/src/main/java/org/dromara/hutool/json/mapper/JSONValueMapper.java @@ -18,10 +18,7 @@ package org.dromara.hutool.json.mapper; import org.dromara.hutool.core.array.ArrayUtil; import org.dromara.hutool.core.util.ObjUtil; -import org.dromara.hutool.json.JSON; -import org.dromara.hutool.json.JSONArray; -import org.dromara.hutool.json.JSONConfig; -import org.dromara.hutool.json.JSONObject; +import org.dromara.hutool.json.*; import org.dromara.hutool.json.serializer.JSONStringer; import org.dromara.hutool.json.writer.GlobalValueWriters; @@ -91,6 +88,10 @@ public class JSONValueMapper implements Serializable { || object instanceof CharSequence // || ObjUtil.isBasicType(object) // ) { + if(object instanceof JSONPrimitive){ + return ((JSONPrimitive) object).getValue(); + } + return object; } diff --git a/hutool-json/src/main/java/org/dromara/hutool/json/reader/JSONParser.java b/hutool-json/src/main/java/org/dromara/hutool/json/reader/JSONParser.java index 241af4a24..75a5c6bcb 100644 --- a/hutool-json/src/main/java/org/dromara/hutool/json/reader/JSONParser.java +++ b/hutool-json/src/main/java/org/dromara/hutool/json/reader/JSONParser.java @@ -183,14 +183,14 @@ public class JSONParser { tokener.nextColon(); // 过滤并设置键值对 - Object value = parse(); + JSON value = parse(); // 添加前置过滤,通过MutablePair实现过滤、修改键值对等 if (null != predicate) { - final MutableEntry pair = new MutableEntry<>(key, value); - if (predicate.test(pair)) { + final MutableEntry entry = new MutableEntry<>(key, value); + if (predicate.test(entry)) { // 使用修改后的键值对 - key = (String) pair.getKey(); - value = pair.getValue(); + key = (String) entry.getKey(); + value = (JSON) entry.getValue(); jsonObject.set(key, value); } }else { diff --git a/hutool-json/src/main/java/org/dromara/hutool/json/serializer/impl/TemporalAccessorSerializer.java b/hutool-json/src/main/java/org/dromara/hutool/json/serializer/impl/TemporalAccessorSerializer.java index c403dd483..0dfe90dbb 100644 --- a/hutool-json/src/main/java/org/dromara/hutool/json/serializer/impl/TemporalAccessorSerializer.java +++ b/hutool-json/src/main/java/org/dromara/hutool/json/serializer/impl/TemporalAccessorSerializer.java @@ -16,11 +16,11 @@ package org.dromara.hutool.json.serializer.impl; +import org.dromara.hutool.core.convert.impl.TemporalAccessorConverter; import org.dromara.hutool.core.lang.Assert; +import org.dromara.hutool.core.lang.Opt; import org.dromara.hutool.core.math.NumberUtil; -import org.dromara.hutool.json.JSON; -import org.dromara.hutool.json.JSONException; -import org.dromara.hutool.json.JSONObject; +import org.dromara.hutool.json.*; import org.dromara.hutool.json.serializer.JSONContext; import org.dromara.hutool.json.serializer.JSONDeserializer; import org.dromara.hutool.json.serializer.JSONSerializer; @@ -101,6 +101,17 @@ public class TemporalAccessorSerializer implements JSONSerializer{ - final String str = StrUtil.repeat("[", 1500) + StrUtil.repeat("]", 1500); - JSONUtil.parseArray(str); - }); + final String str = StrUtil.repeat("[", 1500) + StrUtil.repeat("]", 1500); + JSONUtil.parseArray(str); } } diff --git a/hutool-json/src/test/java/org/dromara/hutool/json/JSONArrayTest.java b/hutool-json/src/test/java/org/dromara/hutool/json/JSONArrayTest.java index 827f3e3b0..90b41c40f 100644 --- a/hutool-json/src/test/java/org/dromara/hutool/json/JSONArrayTest.java +++ b/hutool-json/src/test/java/org/dromara/hutool/json/JSONArrayTest.java @@ -29,7 +29,10 @@ import org.dromara.hutool.json.test.bean.KeyBean; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -315,11 +318,12 @@ public class JSONArrayTest { final String jsonArr = "[{\"id\":111,\"name\":\"test1\"},{\"id\":112,\"name\":\"test2\"}]"; //noinspection MismatchedQueryAndUpdateOfCollection final JSONArray array = new JSONArray(jsonArr, null, (mutable) -> { - final JSONObject o = new JSONObject(mutable.get()); - if ("111".equals(o.getStr("id"))) { - o.set("name", "test1_edit"); + if(mutable.getKey() instanceof Integer){ + final JSONObject o = (JSONObject) mutable.getValue(); + if ("111".equals(o.getStr("id"))) { + o.set("name", "test1_edit"); + } } - mutable.set(new AbstractMap.SimpleEntry<>(1, o)); return true; }); assertEquals(2, array.size()); diff --git a/hutool-json/src/test/java/org/dromara/hutool/json/JSONObjectTest.java b/hutool-json/src/test/java/org/dromara/hutool/json/JSONObjectTest.java index c73d5f44a..a6a91ae23 100644 --- a/hutool-json/src/test/java/org/dromara/hutool/json/JSONObjectTest.java +++ b/hutool-json/src/test/java/org/dromara/hutool/json/JSONObjectTest.java @@ -16,27 +16,21 @@ package org.dromara.hutool.json; +import lombok.Data; import org.dromara.hutool.core.annotation.Alias; import org.dromara.hutool.core.annotation.PropIgnore; import org.dromara.hutool.core.collection.ListUtil; import org.dromara.hutool.core.date.DatePattern; import org.dromara.hutool.core.date.DateUtil; import org.dromara.hutool.core.io.resource.ResourceUtil; +import org.dromara.hutool.core.lang.Console; import org.dromara.hutool.core.map.MapUtil; import org.dromara.hutool.core.text.StrUtil; import org.dromara.hutool.core.util.ObjUtil; -import org.dromara.hutool.json.test.bean.JSONBean; -import org.dromara.hutool.json.test.bean.ResultDto; -import org.dromara.hutool.json.test.bean.Seq; -import org.dromara.hutool.json.test.bean.TokenAuthResponse; -import org.dromara.hutool.json.test.bean.TokenAuthWarp2; -import org.dromara.hutool.json.test.bean.UserA; -import org.dromara.hutool.json.test.bean.UserB; -import org.dromara.hutool.json.test.bean.UserWithMap; +import org.dromara.hutool.json.test.bean.*; import org.dromara.hutool.json.test.bean.report.CaseReport; import org.dromara.hutool.json.test.bean.report.StepReport; import org.dromara.hutool.json.test.bean.report.SuiteReport; -import lombok.Data; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -45,12 +39,7 @@ import java.io.StringReader; import java.math.BigDecimal; import java.nio.charset.StandardCharsets; import java.sql.Timestamp; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; +import java.util.*; /** * JSONObject单元测试 @@ -195,7 +184,7 @@ public class JSONObjectTest { final String jsonStr = "{\"a\":\"
aaa
\"}"; //noinspection MismatchedQueryAndUpdateOfCollection final JSONObject json = new JSONObject(jsonStr); - Assertions.assertEquals("
aaa
", json.get("a")); + Assertions.assertEquals("
aaa
", json.getObj("a")); Assertions.assertEquals(jsonStr, json.toString()); } @@ -752,7 +741,8 @@ public class JSONObjectTest { //noinspection MismatchedQueryAndUpdateOfCollection final JSONObject jsonObject = new JSONObject(jsonStr, null, (pair)-> { if("b".equals(pair.getKey())){ - pair.setValue(pair.getValue() + "_edit"); + final JSONPrimitive primitive = (JSONPrimitive) pair.getValue(); + pair.setValue(primitive.getValue() + "_edit"); } return true; }); diff --git a/hutool-json/src/test/java/org/dromara/hutool/json/writer/GlobalValueWritersTest.java b/hutool-json/src/test/java/org/dromara/hutool/json/writer/GlobalValueWritersTest.java index 661352c74..ae2f8f701 100644 --- a/hutool-json/src/test/java/org/dromara/hutool/json/writer/GlobalValueWritersTest.java +++ b/hutool-json/src/test/java/org/dromara/hutool/json/writer/GlobalValueWritersTest.java @@ -16,10 +16,10 @@ package org.dromara.hutool.json.writer; +import lombok.Data; import org.dromara.hutool.core.convert.Converter; import org.dromara.hutool.json.JSONConfig; import org.dromara.hutool.json.JSONUtil; -import lombok.Data; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test;