目录
2.1.2 java对象转不同(驼峰、蛇形、帕斯卡等)格式字段的json
2.1.3 json格式字符串根据不同属性策略转java对象
1.JSON转POJO IDEA插件
RoboPOJOGenerator
RoboPOJOGenerator是JSON转POJO的IDEA插件,支持将JSON转换为Java或者Kotlin两种语言的POJO。还支持GSON, FastJSON, AutoValue (GSON), Logan Square, Jackson这些JSON框架,方便序列化和反序列化。
{
"code": 0,
"msg": "testZero",
"result": {
"list": [
{
"age": 10,
"customerName": "xiao-ming",
"money": 99.99
},
{
"age": 11,
"customerName": "xiao-hong",
"money": 88.88
}
],
"memberId": 10000,
"memberName": "7-11"
}
}
安装插件->new->Generate POJO from Json
会生成一些实体类,根据需要自己改改,能节省一些时间吧。
2.代码转换
2.1 FastJson
定义实体
import lombok.Data;
import java.io.Serializable;
@Data
public class TestModelZero<T> implements Serializable {
private static final long serialVersionUID = -2436972763295838439L;
private Integer code;
private String msg;
private T result;
}
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class TestModelOne<T> implements Serializable {
private static final long serialVersionUID = 4299844634380400999L;
private Long memberId;
private String memberName;
private List<T> t;
}
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
public class TestModelTwo implements Serializable {
private static final long serialVersionUID = 3867753993122188180L;
private String customerName;
private Integer age;
private BigDecimal money;
}
2.1.1 java对象转json
测试代码
import com.alibaba.fastjson.JSONObject;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
TestModelTwo xiaoMingTest = new TestModelTwo();
xiaoMingTest.setAge(10);
xiaoMingTest.setCustomerName("xiao-ming");
xiaoMingTest.setMoney(new BigDecimal("99.99"));
TestModelTwo xiaoHongTest = new TestModelTwo();
xiaoHongTest.setAge(11);
xiaoHongTest.setCustomerName("xiao-hong");
xiaoHongTest.setMoney(new BigDecimal("88.88"));
List<TestModelTwo> list = new ArrayList<>();
list.add(xiaoMingTest);
list.add(xiaoHongTest);
TestModelOne<TestModelTwo> testModelOne = new TestModelOne<>();
testModelOne.setMemberId(10000L);
testModelOne.setMemberName("7-11");
testModelOne.setList(list);
TestModelZero<TestModelOne<TestModelTwo>> testModelOneTestModelZero =
new TestModelZero<>();
testModelOneTestModelZero.setCode(0);
testModelOneTestModelZero.setMsg("testZero");
testModelOneTestModelZero.setResult(testModelOne);
String json = JSONObject.toJSONString(testModelOneTestModelZero);
System.out.println(json);
}
}
测试结果
{
"code": 0,
"msg": "testZero",
"result": {
"list": [
{
"age": 10,
"customerName": "xiao-ming",
"money": 99.99
},
{
"age": 11,
"customerName": "xiao-hong",
"money": 88.88
}
],
"memberId": 10000,
"memberName": "7-11"
}
}
2.1.2 java对象转不同(驼峰、蛇形、帕斯卡等)格式字段的json
测试代码
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.PropertyNamingStrategy;
import com.alibaba.fastjson.serializer.SerializeConfig;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
TestModelTwo xiaoMingTest = new TestModelTwo();
xiaoMingTest.setAge(10);
xiaoMingTest.setCustomerName("xiao-ming");
xiaoMingTest.setMoney(new BigDecimal("99.99"));
TestModelTwo xiaoHongTest = new TestModelTwo();
xiaoHongTest.setAge(11);
xiaoHongTest.setCustomerName("xiao-hong");
xiaoHongTest.setMoney(new BigDecimal("88.88"));
List<TestModelTwo> list = new ArrayList<>();
list.add(xiaoMingTest);
list.add(xiaoHongTest);
TestModelOne<TestModelTwo> testModelOne = new TestModelOne<>();
testModelOne.setMemberId(10000L);
testModelOne.setMemberName("7-11");
testModelOne.setList(list);
TestModelZero<TestModelOne<TestModelTwo>> testModelOneTestModelZero =
new TestModelZero<>();
testModelOneTestModelZero.setCode(0);
testModelOneTestModelZero.setMsg("testZero");
testModelOneTestModelZero.setResult(testModelOne);
// 序列化配置
SerializeConfig config = new SerializeConfig();
// 属性名称策略
config.propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;
String json = JSONObject.toJSONString(testModelOneTestModelZero, config);
System.out.println(json);
}
}
支持策略:
- CamelCase
- PascalCase
- SnakeCase
- KebabCase
- NoChange
测试结果
{
"code": 0,
"msg": "testZero",
"result": {
"list": [
{
"age": 10,
"customer_name": "xiao-ming",
"money": 99.99
},
{
"age": 11,
"customer_name": "xiao-hong",
"money": 88.88
}
],
"member_id": 10000,
"member_name": "7-11"
}
}
2.1.3 json格式字符串根据不同属性策略转java对象
测试代码
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.PropertyNamingStrategy;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.parser.ParserConfig;
import static com.alibaba.fastjson.JSON.DEFAULT_PARSER_FEATURE;
public class Test {
public static void main(String[] args) {
String jsonStr = "{\n" +
" \"code\": 0,\n" +
" \"msg\": \"testZero\",\n" +
" \"result\": {\n" +
" \"list\": [\n" +
" {\n" +
" \"age\": 10,\n" +
" \"customer_name\": \"xiao-ming\",\n" +
" \"money\": 99.99\n" +
" },\n" +
" {\n" +
" \"age\": 11,\n" +
" \"customer_name\": \"xiao-hong\",\n" +
" \"money\": 88.88\n" +
" }\n" +
" ],\n" +
" \"member_id\": 10000,\n" +
" \"member_name\": \"7-11\"\n" +
" }\n" +
"}";
ParserConfig parserConfig = new ParserConfig();
parserConfig.propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;
TypeReference typeReference =
new TypeReference<TestModelZero<TestModelOne<TestModelTwo>>>(){};
TestModelZero<TestModelOne<TestModelTwo>> testModelOneTestModelZero =
toTrans(jsonStr, typeReference, parserConfig);
}
private static <T> T toTrans(String jsonStr,
TypeReference typeReference,
ParserConfig parserConfig) {
return (T)(JSONObject.parseObject(
jsonStr, typeReference.getType(), parserConfig, DEFAULT_PARSER_FEATURE));
}
}
测试结果