This commit is contained in:
Looly
2024-10-02 01:07:15 +08:00
parent e54c0b26f6
commit ea56cc567c
4 changed files with 226 additions and 37 deletions

View File

@@ -18,6 +18,7 @@ package org.dromara.hutool.json;
import lombok.Data;
import org.dromara.hutool.core.collection.ListUtil;
import org.dromara.hutool.core.date.DateTime;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.map.MapUtil;
import org.dromara.hutool.json.test.bean.Price;
@@ -144,14 +145,16 @@ public class JSONUtilTest {
}
@Test
public void toJsonStrTest() {
public void toJsonPrettyStrTest() {
final DateTime date = DateUtil.date(1727800929605L);
final UserA a1 = new UserA();
a1.setA("aaaa");
a1.setDate(DateUtil.now());
a1.setDate(date);
a1.setName("AAAAName");
final UserA a2 = new UserA();
a2.setA("aaaa222");
a2.setDate(DateUtil.now());
a2.setDate(date);
a2.setName("AAAA222Name");
final ArrayList<UserA> list = ListUtil.of(a1, a2);
@@ -159,9 +162,22 @@ public class JSONUtilTest {
map.put("total", 13);
map.put("rows", list);
final String str = JSONUtil.toJsonPrettyStr(map);
JSONUtil.parse(str);
Assertions.assertNotNull(str);
final String jsonStr = JSONUtil.toJsonPrettyStr(map);
Assertions.assertEquals("{\n" +
" \"total\": 13,\n" +
" \"rows\": [\n" +
" {\n" +
" \"name\": \"AAAAName\",\n" +
" \"a\": \"aaaa\",\n" +
" \"date\": 1727800929605\n" +
" },\n" +
" {\n" +
" \"name\": \"AAAA222Name\",\n" +
" \"a\": \"aaaa222\",\n" +
" \"date\": 1727800929605\n" +
" }\n" +
" ]\n" +
"}", jsonStr);
}
@Test

View File

@@ -16,12 +16,16 @@
package org.dromara.hutool.json.engine;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.dromara.hutool.core.date.DateTime;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.date.TimeUtil;
import org.junit.jupiter.api.Test;
import java.io.StringReader;
import java.util.Arrays;
import java.util.TimeZone;
@@ -56,6 +60,11 @@ public class JSONEngineTest {
Arrays.stream(engineNames).forEach(this::assertEmptyBeanToJson);
}
@Test
void toStringOrFromStringTest() {
Arrays.stream(engineNames).forEach(this::assertToStringOrFromString);
}
private void assertWriteDateFormat(final String engineName) {
final DateTime date = DateUtil.parse("2024-01-01 01:12:21");
final BeanWithDate bean = new BeanWithDate(date, TimeUtil.of(date));
@@ -110,8 +119,37 @@ public class JSONEngineTest {
assertEquals("{}", jsonString);
}
private void assertToStringOrFromString(final String engineName) {
final JSONEngine engine = JSONEngineFactory.createEngine(engineName);
final TestBean testBean = new TestBean("张三", 18, true);
final String jsonStr = "{\"name\":\"张三\",\"age\":18,\"gender\":true}";
if("moshi".equals(engineName)){
// TODO Moshi无法指定key的顺序
assertEquals("{\"age\":18,\"gender\":true,\"name\":\"张三\"}", engine.toJsonString(testBean));
}else{
assertEquals(jsonStr, engine.toJsonString(testBean));
}
final TestBean testBean1 = engine.deserialize(new StringReader(jsonStr), TestBean.class);
assertEquals(testBean, testBean1);
}
@Data
private static class EmptyBean{
}
@Data
@NoArgsConstructor
@AllArgsConstructor
static class TestBean {
// 解决输出顺序问题
@JSONField(ordinal = 1)
private String name;
@JSONField(ordinal = 2)
private int age;
@JSONField(ordinal = 3)
private boolean gender;
}
}