This commit is contained in:
Looly 2021-09-08 11:55:09 +08:00
parent 185fb1a72e
commit 9223811716
6 changed files with 37 additions and 34 deletions

View File

@ -130,7 +130,7 @@ Each module can be introduced individually, or all modules can be introduced by
### 🍐Gradle ### 🍐Gradle
``` ```
compile 'cn.hutool:hutool-all:5.7.12' implementation 'cn.hutool:hutool-all:5.7.12'
``` ```
## 📥Download ## 📥Download

View File

@ -128,7 +128,7 @@ Hutool的存在就是为了减少代码搜索成本避免网络上参差不
### 🍐Gradle ### 🍐Gradle
``` ```
compile 'cn.hutool:hutool-all:5.7.12' implementation 'cn.hutool:hutool-all:5.7.12'
``` ```
### 📥下载jar ### 📥下载jar

View File

@ -5,6 +5,7 @@ import cn.hutool.core.collection.ArrayIter;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.text.StrJoiner; import cn.hutool.core.text.StrJoiner;
import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.TypeUtil; import cn.hutool.core.util.TypeUtil;
import cn.hutool.json.serialize.GlobalSerializeMapping; import cn.hutool.json.serialize.GlobalSerializeMapping;
@ -91,7 +92,7 @@ public class JSONArray implements JSON, JSONGetter<Integer>, List<Object>, Rando
*/ */
public JSONArray(int initialCapacity, JSONConfig config) { public JSONArray(int initialCapacity, JSONConfig config) {
this.rawList = new ArrayList<>(initialCapacity); this.rawList = new ArrayList<>(initialCapacity);
this.config = config; this.config = ObjectUtil.defaultIfNull(config, JSONConfig.create());
} }
/** /**

View File

@ -12,7 +12,7 @@ public class JSONConfig implements Serializable {
private static final long serialVersionUID = 119730355204738278L; private static final long serialVersionUID = 119730355204738278L;
/** /**
* 是否有序顺序按照加入顺序排序 * 是否有序顺序按照加入顺序排序只针对JSONObject有效
*/ */
private boolean order; private boolean order;
/** /**
@ -51,7 +51,7 @@ public class JSONConfig implements Serializable {
} }
/** /**
* 是否有序顺序按照加入顺序排序 * 是否有序顺序按照加入顺序排序只针对JSONObject有效
* *
* @return 是否有序 * @return 是否有序
*/ */
@ -60,7 +60,7 @@ public class JSONConfig implements Serializable {
} }
/** /**
* 设置是否有序顺序按照加入顺序排序 * 设置是否有序顺序按照加入顺序排序只针对JSONObject有效
* *
* @param order 是否有序 * @param order 是否有序
* @return this * @return this

View File

@ -110,7 +110,7 @@ public class JSONObject implements JSON, JSONGetter<String>, Map<String, Object>
* 构造 * 构造
* *
* @param capacity 初始大小 * @param capacity 初始大小
* @param config JSON配置项null表示默认配置 * @param config JSON配置项{@code null}则使用默认配置
* @since 4.1.19 * @since 4.1.19
*/ */
public JSONObject(int capacity, JSONConfig config) { public JSONObject(int capacity, JSONConfig config) {
@ -192,7 +192,7 @@ public class JSONObject implements JSON, JSONGetter<String>, Map<String, Object>
* 例如如果JavaBean对象中有个方法getName()值为"张三"获得的键值对为name: "张三" * 例如如果JavaBean对象中有个方法getName()值为"张三"获得的键值对为name: "张三"
* *
* @param source JavaBean或者Map对象或者String * @param source JavaBean或者Map对象或者String
* @param config JSON配置文件 * @param config JSON配置文件{@code null}则使用默认配置
* @since 4.2.2 * @since 4.2.2
*/ */
public JSONObject(Object source, JSONConfig config) { public JSONObject(Object source, JSONConfig config) {

View File

@ -96,7 +96,7 @@ public class JSONUtil {
* @return JSONObject * @return JSONObject
*/ */
public static JSONObject parseObj(Object obj) { public static JSONObject parseObj(Object obj) {
return new JSONObject(obj); return parseObj(obj, null);
} }
/** /**
@ -109,6 +109,13 @@ public class JSONUtil {
* @since 5.3.1 * @since 5.3.1
*/ */
public static JSONObject parseObj(Object obj, JSONConfig config) { public static JSONObject parseObj(Object obj, JSONConfig config) {
// 默认配置根据对象类型决定是否有序
if(null == config){
config = JSONConfig.create();
if(InternalJSONUtil.isOrder(obj)){
config.setOrder(true);
}
}
return new JSONObject(obj, config); return new JSONObject(obj, config);
} }
@ -121,7 +128,7 @@ public class JSONUtil {
* @since 3.0.9 * @since 3.0.9
*/ */
public static JSONObject parseObj(Object obj, boolean ignoreNullValue) { public static JSONObject parseObj(Object obj, boolean ignoreNullValue) {
return new JSONObject(obj, ignoreNullValue); return parseObj(obj, ignoreNullValue, InternalJSONUtil.isOrder(obj));
} }
/** /**
@ -155,7 +162,7 @@ public class JSONUtil {
* @since 3.0.8 * @since 3.0.8
*/ */
public static JSONArray parseArray(Object arrayOrCollection) { public static JSONArray parseArray(Object arrayOrCollection) {
return new JSONArray(arrayOrCollection); return parseArray(arrayOrCollection, null);
} }
/** /**
@ -183,36 +190,32 @@ public class JSONUtil {
} }
/** /**
* 转换对象为JSON<br> * 转换对象为JSON如果用户不配置JSONConfig则JSON的有序与否与传入对象有关<br>
* 支持的对象<br> * 支持的对象
* String: 转换为相应的对象<br> * <ul>
* Array Collection转换为JSONArray<br> * <li>String: 转换为相应的对象</li>
* Bean对象转为JSONObject * <li>ArrayIterableIterator转换为JSONArray</li>
* <li>Bean对象转为JSONObject</li>
* </ul>
* *
* @param obj 对象 * @param obj 对象
* @return JSON * @return JSON
*/ */
public static JSON parse(Object obj) { public static JSON parse(Object obj) {
if(obj instanceof JSON){ return parse(obj, null);
return (JSON) obj;
}
final JSONConfig config = JSONConfig.create();
if(InternalJSONUtil.isOrder(obj)){
config.setOrder(true);
}
return parse(obj, config);
} }
/** /**
* 转换对象为JSON<br> * 转换对象为JSON如果用户不配置JSONConfig则JSON的有序与否与传入对象有关<br>
* 支持的对象<br> * 支持的对象
* String: 转换为相应的对象<br> * <ul>
* ArrayIterableIterator转换为JSONArray<br> * <li>String: 转换为相应的对象</li>
* Bean对象转为JSONObject * <li>ArrayIterableIterator转换为JSONArray</li>
* <li>Bean对象转为JSONObject</li>
* </ul>
* *
* @param obj 对象 * @param obj 对象
* @param config JSON配置 * @param config JSON配置{@code null}使用默认配置
* @return JSON * @return JSON
* @since 5.3.1 * @since 5.3.1
*/ */
@ -220,7 +223,6 @@ public class JSONUtil {
if (null == obj) { if (null == obj) {
return null; return null;
} }
JSON json; JSON json;
if (obj instanceof JSON) { if (obj instanceof JSON) {
json = (JSON) obj; json = (JSON) obj;
@ -228,9 +230,9 @@ public class JSONUtil {
final String jsonStr = StrUtil.trim((CharSequence) obj); final String jsonStr = StrUtil.trim((CharSequence) obj);
json = isJsonArray(jsonStr) ? parseArray(jsonStr, config) : parseObj(jsonStr, config); json = isJsonArray(jsonStr) ? parseArray(jsonStr, config) : parseObj(jsonStr, config);
} else if (obj instanceof Iterable || obj instanceof Iterator || ArrayUtil.isArray(obj)) {// 列表 } else if (obj instanceof Iterable || obj instanceof Iterator || ArrayUtil.isArray(obj)) {// 列表
json = new JSONArray(obj, config); json = parseArray(obj, config);
} else {// 对象 } else {// 对象
json = new JSONObject(obj, config); json = parseObj(obj, config);
} }
return json; return json;