FastJson

这篇博客介绍了如何使用FastJson库将Java对象转换为JSON格式。通过@JSONField注解,可以自定义字段名称和序列化设置。示例展示了Person类的转换,以及如何将JSON字符串反序列化回Java对象。测试用例验证了转换的正确性。
摘要由CSDN通过智能技术生成

FastJson

将 Java 对象转换为 JSON 格式

public class Person {
    @JSONField(name = "AGE")
    private int age;
    @JSONField(name = "FULL NAME")
    private String fullName;
    @JSONField(name = "DATE OF BIRTH")
    private Date dateOfBirth;
    public Person(int age, String fullName, Date dateOfBirth) {
        super();
        this.age = age;
        this.fullName= fullName;
        this.dateOfBirth = dateOfBirth;
    }
    // 标准 getters & setters
}

private List<Person> listOfPersons = new ArrayList<Person>();
@Before
public void setUp() {
    listOfPersons.add(new Person(15, "John Doe", new Date()));
    listOfPersons.add(new Person(20, "Janette Doe", new Date()));
}
@Test
public void whenJavaList_thanConvertToJsonCorrect() {
    String jsonOutput= JSON.toJSONString(listOfPersons);
}

结果为

[    
    {  {  
        "AGE":15,"AGE":15,
        "DATE OF BIRTH":1468962431394,"DATE OF BIRTH":1468962431394,
        "FULL NAME":"John Doe""FULL NAME":"John Doe"
    },},
    {  {  
        "AGE":20,"AGE":20,
        "DATE OF BIRTH":1468962431394,"DATE OF BIRTH":1468962431394,
        "FULL NAME":"Janette Doe""FULL NAME":"Janette Doe"
    }}
]]

以上代码中我们列出了基本参数类别,并使用 @JSONField 注解,以便实现自定义转换:

  • *format* 参数用于格式化 date 属性。
  • 默认情况下, FastJson 库可以序列化 Java bean 实体, 但我们可以使用 *serialize* 指定字段不序列化。
  • 使用 *ordinal* 参数指定字段的顺序

JSONField

public @interface JSONField {
    // 配置序列化和反序列化的顺序,1.1.42版本之后才支持
    int ordinal() default 0;

     // 指定字段的名称
    String name() default "";

    // 指定字段的格式,对日期格式有用
    String format() default "";

    // 是否序列化
    boolean serialize() default true;

    // 是否反序列化
    boolean deserialize() default true;
}

JSON字符串转换为 Java 对象

@Test
public void whenJson_thanConvertToObjectCorrect() {
    Person person = new Person(20, "John", "Doe", new Date());
    String jsonObject = JSON.toJSONString(person);
    Person newPerson = JSON.parseObject(jsonObject, Person.class);
     
    assertEquals(newPerson.getAge(), 0); // 如果我们设置系列化为 false
    assertEquals(newPerson.getFullName(), listOfPersons.get(0).getFullName());
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值