This commit is contained in:
Looly 2024-10-02 01:25:47 +08:00
parent ea56cc567c
commit 09f6123479
6 changed files with 46 additions and 71 deletions

View File

@ -31,7 +31,7 @@ public class FastJSONTest {
final JSONEngine engine = JSONEngineFactory.createEngine("fastjson");
engine.init(JSONEngineConfig.of().setPrettyPrint(true));
final JSONEngineFactoryTest.TestBean testBean = new JSONEngineFactoryTest.TestBean("张三", 18, true);
final JSONEngineTest.TestBean testBean = new JSONEngineTest.TestBean("张三", 18, true);
String jsonString = engine.toJsonString(testBean);
// 使用统一换行符
jsonString = StrUtil.removeAll(jsonString, '\r');

View File

@ -34,7 +34,7 @@ public class GsonTest {
final JSONEngine engine = JSONEngineFactory.createEngine("gson");
engine.init(JSONEngineConfig.of().setPrettyPrint(true));
final JSONEngineFactoryTest.TestBean testBean = new JSONEngineFactoryTest.TestBean("张三", 18, true);
final JSONEngineTest.TestBean testBean = new JSONEngineTest.TestBean("张三", 18, true);
final String jsonString = engine.toJsonString(testBean);
// 使用统一换行符
Assertions.assertEquals("{\n" +

View File

@ -25,7 +25,7 @@ public class HutoolJSONTest {
final JSONEngine engine = JSONEngineFactory.createEngine("hutoolJSON");
engine.init(JSONEngineConfig.of().setPrettyPrint(true));
final JSONEngineFactoryTest.TestBean testBean = new JSONEngineFactoryTest.TestBean("张三", 18, true);
final JSONEngineTest.TestBean testBean = new JSONEngineTest.TestBean("张三", 18, true);
final String jsonString = engine.toJsonString(testBean);
Assertions.assertEquals("{\n" +
" \"name\": \"张三\",\n" +

View File

@ -16,17 +16,11 @@
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.json.engine.fastjson.FastJSON2Engine;
import org.dromara.hutool.json.engine.gson.GsonEngine;
import org.dromara.hutool.json.engine.jackson.JacksonEngine;
import org.junit.jupiter.api.Test;
import java.io.StringReader;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class JSONEngineFactoryTest {
@ -40,84 +34,23 @@ public class JSONEngineFactoryTest {
void jacksonTest() {
final JSONEngine engine = JSONEngineFactory.createEngine("jackson");
assertEquals(JacksonEngine.class, engine.getClass());
final TestBean testBean = new TestBean("张三", 18, true);
final String jsonString = engine.toJsonString(testBean);
final String resultJsonStr = "{\"name\":\"张三\",\"age\":18,\"gender\":true}";
assertEquals(resultJsonStr, jsonString);
final TestBean testBean1 = engine.fromJsonString(resultJsonStr, TestBean.class);
assertEquals(testBean, testBean1);
}
@Test
void jacksonTest2() {
final JSONEngine engine = JSONEngineFactory.createEngine("jackson");
assertEquals(JacksonEngine.class, engine.getClass());
final TestBean testBean = new TestBean("张三", 18, true);
final String serialize = engine.toJsonString(testBean);
final String jsonStr = "{\"name\":\"张三\",\"age\":18,\"gender\":true}";
assertEquals(jsonStr, serialize);
final TestBean testBean1 = engine.fromJsonString(jsonStr, TestBean.class);
assertEquals(testBean, testBean1);
}
@Test
void GsonTest() {
final JSONEngine engine = JSONEngineFactory.createEngine("gson");
assertEquals(GsonEngine.class, engine.getClass());
final TestBean testBean = new TestBean("张三", 18, true);
final String jsonStr = "{\"name\":\"张三\",\"age\":18,\"gender\":true}";
assertEquals(jsonStr, engine.toJsonString(testBean));
final TestBean testBean1 = engine.deserialize(new StringReader(jsonStr), TestBean.class);
assertEquals(testBean, testBean1);
}
@Test
void fastJSON2Test() {
final JSONEngine engine = JSONEngineFactory.createEngine("fastjson");
assertEquals(FastJSON2Engine.class, engine.getClass());
final TestBean testBean = new TestBean("张三", 18, true);
final String jsonStr = "{\"name\":\"张三\",\"age\":18,\"gender\":true}";
assertEquals(jsonStr, engine.toJsonString(testBean));
final TestBean testBean1 = engine.deserialize(new StringReader(jsonStr), TestBean.class);
assertEquals(testBean, testBean1);
}
@Test
void HutoolJSONTest() {
final JSONEngine engine = JSONEngineFactory.createEngine("hutoolJSON");
assertEquals(HutoolJSONEngine.class, engine.getClass());
final TestBean testBean = new TestBean("张三", 18, true);
final String jsonStr = "{\"name\":\"张三\",\"age\":18,\"gender\":true}";
assertEquals(jsonStr, engine.toJsonString(testBean));
final TestBean testBean1 = engine.deserialize(new StringReader(jsonStr), TestBean.class);
assertEquals(testBean, testBean1);
}
@Data
@NoArgsConstructor
@AllArgsConstructor
static class TestBean {
// 解决输出顺序问题
@JSONField(ordinal = 1)
private String name;
@JSONField(ordinal = 2)
private int age;
@JSONField(ordinal = 3)
private boolean gender;
}
}

View File

@ -23,6 +23,8 @@ 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.dromara.hutool.core.lang.Console;
import org.dromara.hutool.core.text.StrUtil;
import org.junit.jupiter.api.Test;
import java.io.StringReader;
@ -65,6 +67,11 @@ public class JSONEngineTest {
Arrays.stream(engineNames).forEach(this::assertToStringOrFromString);
}
@Test
void prettyPrintTest() {
Arrays.stream(engineNames).forEach(this::assertPrettyPrint);
}
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));
@ -135,6 +142,41 @@ public class JSONEngineTest {
assertEquals(testBean, testBean1);
}
private void assertPrettyPrint(final String engineName){
final JSONEngine engine = JSONEngineFactory.createEngine(engineName);
engine.init(JSONEngineConfig.of().setPrettyPrint(true));
final TestBean testBean = new TestBean("张三", 18, true);
String jsonString = engine.toJsonString(testBean);
Console.log(engineName);
if("jackson".equals(engineName)){
jsonString = jsonString.replace(" : ", ": ");
// 使用统一换行符
jsonString = StrUtil.removeAll(jsonString, '\r');
}
if(engineName.startsWith("fastjson")){
jsonString = jsonString.replace(":", ": ");
jsonString = jsonString.replace("\t", " ");
}
if("moshi".equals(engineName)){
// Moshi顺序不同
// 使用统一换行符
assertEquals("{\n" +
" \"age\": 18,\n" +
" \"gender\": true,\n" +
" \"name\": \"张三\"\n" +
"}", jsonString);
return;
}
// 使用统一换行符
assertEquals("{\n" +
" \"name\": \"张三\",\n" +
" \"age\": 18,\n" +
" \"gender\": true\n" +
"}", jsonString);
}
@Data
private static class EmptyBean{

View File

@ -29,7 +29,7 @@ public class JacksonTest {
final JSONEngine engine = JSONEngineFactory.createEngine("jackson");
engine.init(JSONEngineConfig.of().setPrettyPrint(true));
final JSONEngineFactoryTest.TestBean testBean = new JSONEngineFactoryTest.TestBean("张三", 18, true);
final JSONEngineTest.TestBean testBean = new JSONEngineTest.TestBean("张三", 18, true);
String jsonString = engine.toJsonString(testBean);
// 使用统一换行符
jsonString = StrUtil.removeAll(jsonString, '\r');