mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-04-19 03:01:48 +08:00
fix json
This commit is contained in:
parent
1a7812a281
commit
0056560a93
@ -10,6 +10,7 @@
|
||||
|
||||
### Bug修复
|
||||
* 【json 】 JSONUtil.isJson方法改变trim策略,解决特殊空白符导致判断失败问题
|
||||
* 【json 】 修复SQLEXception导致的栈溢出(issue#1401@Github)
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
@ -605,8 +605,14 @@ public class JSONArray implements JSON, JSONGetter<Integer>, List<Object>, Rando
|
||||
} else {
|
||||
throw new JSONException("JSONArray initial value should be a string or collection or array.");
|
||||
}
|
||||
|
||||
Object next;
|
||||
while (iter.hasNext()) {
|
||||
this.add(iter.next());
|
||||
next = iter.next();
|
||||
// 检查循环引用
|
||||
if(next != source){
|
||||
this.add(next);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,7 +24,6 @@ import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.util.Collection;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.ResourceBundle;
|
||||
@ -653,7 +652,7 @@ public class JSONObject implements JSON, JSONGetter<String>, Map<String, Object>
|
||||
return;
|
||||
}
|
||||
|
||||
if(ArrayUtil.isArray(source) || source instanceof Iterable || source instanceof Iterator){
|
||||
if(ArrayUtil.isArray(source)){
|
||||
// 不支持集合类型转换为JSONObject
|
||||
throw new JSONException("Unsupported type [{}] to JSONObject!", source.getClass());
|
||||
}
|
||||
|
@ -21,6 +21,7 @@ import java.io.StringWriter;
|
||||
import java.io.Writer;
|
||||
import java.lang.reflect.Type;
|
||||
import java.nio.charset.Charset;
|
||||
import java.sql.SQLException;
|
||||
import java.time.temporal.TemporalAccessor;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
@ -735,6 +736,11 @@ public final class JSONUtil {
|
||||
}
|
||||
|
||||
try {
|
||||
// fix issue#1401@Github
|
||||
if(object instanceof SQLException){
|
||||
return object.toString();
|
||||
}
|
||||
|
||||
// JSONArray
|
||||
if (object instanceof Iterable || ArrayUtil.isArray(object)) {
|
||||
return new JSONArray(object, jsonConfig);
|
||||
|
@ -11,6 +11,7 @@ import cn.hutool.json.test.bean.UserC;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@ -179,4 +180,12 @@ public class JSONUtilTest {
|
||||
" \"test\": \"\\\\地库地库\",\n" +
|
||||
"}");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void sqlExceptionTest(){
|
||||
//https://github.com/looly/hutool/issues/1401
|
||||
// SQLException实现了Iterable接口,默认是遍历之,会栈溢出,修正后只返回string
|
||||
final JSONObject set = JSONUtil.createObj().set("test", new SQLException("test"));
|
||||
Assert.assertEquals("{\"test\":\"java.sql.SQLException: test\"}", set.toString());
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user