diff --git a/hutool-json/src/main/java/org/dromara/hutool/json/InternalJSONUtil.java b/hutool-json/src/main/java/org/dromara/hutool/json/InternalJSONUtil.java
index fc1afd4d9..12f276026 100644
--- a/hutool-json/src/main/java/org/dromara/hutool/json/InternalJSONUtil.java
+++ b/hutool-json/src/main/java/org/dromara/hutool/json/InternalJSONUtil.java
@@ -34,6 +34,7 @@ import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.lang.reflect.Type;
+import java.math.BigDecimal;
import java.util.*;
import java.util.function.Predicate;
@@ -44,7 +45,50 @@ import java.util.function.Predicate;
*/
public final class InternalJSONUtil {
- private InternalJSONUtil() {
+ /**
+ * 尝试转换字符串为number, boolean, or null,无法转换返回String
+ * 此方法用于解析JSON字符串时,将字符串中的值转换为JSON值对象
+ *
+ * @param string A String.
+ * @return A simple JSON value.
+ */
+ public static Object parseValueFromString(final String string) {
+ // null处理
+ if (StrUtil.isEmpty(string) || StrUtil.NULL.equalsIgnoreCase(string)) {
+ return null;
+ }
+
+ // boolean处理
+ if ("true".equalsIgnoreCase(string)) {
+ return Boolean.TRUE;
+ }
+ if ("false".equalsIgnoreCase(string)) {
+ return Boolean.FALSE;
+ }
+
+ // Number处理
+ final char b = string.charAt(0);
+ if ((b >= '0' && b <= '9') || b == '-') {
+ try {
+ if (StrUtil.containsAnyIgnoreCase(string, ".", "e")) {
+ // pr#192@Gitee,Double会出现小数精度丢失问题,此处使用BigDecimal
+ return new BigDecimal(string);
+ } else {
+ final long myLong = Long.parseLong(string);
+ if (string.equals(Long.toString(myLong))) {
+ if (myLong == (int) myLong) {
+ return (int) myLong;
+ } else {
+ return myLong;
+ }
+ }
+ }
+ } catch (final Exception ignore) {
+ }
+ }
+
+ // 其它情况返回原String值下
+ return string;
}
/**
diff --git a/hutool-json/src/main/java/org/dromara/hutool/json/JSONTokener.java b/hutool-json/src/main/java/org/dromara/hutool/json/JSONTokener.java
index 95261aa19..bceb0b955 100644
--- a/hutool-json/src/main/java/org/dromara/hutool/json/JSONTokener.java
+++ b/hutool-json/src/main/java/org/dromara/hutool/json/JSONTokener.java
@@ -15,7 +15,6 @@ package org.dromara.hutool.json;
import org.dromara.hutool.core.io.IoUtil;
import org.dromara.hutool.core.io.ReaderWrapper;
import org.dromara.hutool.core.lang.Assert;
-import org.dromara.hutool.json.mapper.JSONValueMapper;
import java.io.IOException;
import java.io.InputStream;
@@ -393,7 +392,7 @@ public class JSONTokener extends ReaderWrapper {
if (valueString.isEmpty()) {
throw this.syntaxError("Missing value");
}
- return getOnlyStringValue ? valueString : JSONValueMapper.toJsonValue(valueString);
+ return getOnlyStringValue ? valueString : InternalJSONUtil.parseValueFromString(valueString);
}
/**
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 c81a52869..cd464d5c5 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
@@ -13,7 +13,6 @@
package org.dromara.hutool.json.mapper;
import org.dromara.hutool.core.array.ArrayUtil;
-import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.core.util.ObjUtil;
import org.dromara.hutool.json.JSON;
import org.dromara.hutool.json.JSONArray;
@@ -22,8 +21,6 @@ import org.dromara.hutool.json.JSONObject;
import org.dromara.hutool.json.serialize.JSONStringer;
import org.dromara.hutool.json.writer.GlobalValueWriters;
-import java.math.BigDecimal;
-
/**
* 对象和JSON值映射器,用于转换对象为JSON对象中的值
* 有效的JSON值包括:
@@ -51,52 +48,6 @@ public class JSONValueMapper {
return new JSONValueMapper(jsonConfig);
}
- /**
- * 尝试转换字符串为number, boolean, or null,无法转换返回String
- * 此方法用于解析JSON字符串时,将字符串中的值转换为JSON值对象
- *
- * @param string A String.
- * @return A simple JSON value.
- */
- public static Object toJsonValue(final String string) {
- // null处理
- if (StrUtil.isEmpty(string) || StrUtil.NULL.equalsIgnoreCase(string)) {
- return null;
- }
-
- // boolean处理
- if ("true".equalsIgnoreCase(string)) {
- return Boolean.TRUE;
- }
- if ("false".equalsIgnoreCase(string)) {
- return Boolean.FALSE;
- }
-
- // Number处理
- final char b = string.charAt(0);
- if ((b >= '0' && b <= '9') || b == '-') {
- try {
- if (StrUtil.containsAnyIgnoreCase(string, ".", "e")) {
- // pr#192@Gitee,Double会出现小数精度丢失问题,此处使用BigDecimal
- return new BigDecimal(string);
- } else {
- final long myLong = Long.parseLong(string);
- if (string.equals(Long.toString(myLong))) {
- if (myLong == (int) myLong) {
- return (int) myLong;
- } else {
- return myLong;
- }
- }
- }
- } catch (final Exception ignore) {
- }
- }
-
- // 其它情况返回原String值下
- return string;
- }
-
private final JSONConfig jsonConfig;
/**
diff --git a/hutool-json/src/main/java/org/dromara/hutool/json/xml/JSONXMLParser.java b/hutool-json/src/main/java/org/dromara/hutool/json/xml/JSONXMLParser.java
index 9d22f1522..d08f36317 100644
--- a/hutool-json/src/main/java/org/dromara/hutool/json/xml/JSONXMLParser.java
+++ b/hutool-json/src/main/java/org/dromara/hutool/json/xml/JSONXMLParser.java
@@ -16,9 +16,9 @@ import org.dromara.hutool.core.lang.mutable.MutableEntry;
import org.dromara.hutool.core.text.CharUtil;
import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.core.xml.XmlConstants;
+import org.dromara.hutool.json.InternalJSONUtil;
import org.dromara.hutool.json.JSONException;
import org.dromara.hutool.json.JSONObject;
-import org.dromara.hutool.json.mapper.JSONValueMapper;
import java.util.function.Predicate;
@@ -168,7 +168,7 @@ public class JSONXMLParser {
if (!(token instanceof String)) {
throw x.syntaxError("Missing value");
}
- jsonobject.append(string, keepStrings ? token : JSONValueMapper.toJsonValue((String) token));
+ jsonobject.append(string, keepStrings ? token : InternalJSONUtil.parseValueFromString((String) token));
token = null;
} else {
jsonobject.append(string, "");
@@ -198,7 +198,7 @@ public class JSONXMLParser {
} else if (token instanceof String) {
string = (String) token;
if (!string.isEmpty()) {
- jsonobject.append("content", keepStrings ? token : JSONValueMapper.toJsonValue(string));
+ jsonobject.append("content", keepStrings ? token : InternalJSONUtil.parseValueFromString(string));
}
} else if (token == XmlConstants.C_LT) {