> 文章列表 > JSON序列化和反序列化

JSON序列化和反序列化

JSON序列化和反序列化

JSON是阿里巴巴开发的一款JSON处理工具包,提供了常用的JSON序列化(将Java对象转换为JSON字符串)和反序列化(将JSON字符串转换为Java对象)方法。下面是一些JSON中常用的方法:

JSON.parseObject(String text, Class<T> clazz):将JSON字符串转换为Java对象。

JSON.toJSONString(Object object):将Java对象序列化为JSON字符串。

JSON.parseArray(String text, Class<T> clazz):将JSON字符串转换为Java对象集合。

JSON.toJSON(Object object):将Java对象转换为JSONObject或JSONArray对象。

JSON.parse(String text):将JSON字符串解析为JSONObject或JSONArray对象。

注意:要在pom.xml文件添加依赖

 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.59</version></dependency>
// 将JSON字符串转换为Java对象
String json = "{\\"name\\":\\"Tom\\",\\"age\\":20}";
Person person = JSON.parseObject(json, Person.class);// 将Java对象序列化为JSON字符串
Person person = new Person();
person.setName("Tom");
person.setAge(20);
String json = JSON.toJSONString(person);// 将Java对象转换为JSONObject或JSONArray对象Person person = new Person();person.setName("Tom");person.setAge(20);JSONObject jsonObject = (JSONObject) JSON.toJSON(person);// 将JSON字符串转换为Java对象集合
String json = "[{\\"name\\":\\"Tom\\",\\"age\\":20},{\\"name\\":\\"Jerry\\",\\"age\\":18}]";
List<Person> persons = JSON.parseArray(json, Person.class);// 将JSON字符串解析为JSONObject或JSONArray对象
String json = "{\\"name\\":\\"Tom\\",\\"age\\":20}";
JSONObject jsonObject = JSON.parseObject(json);

需要注意的是,JSON序列化和反序列化时,需要保证Java对象中属性的名称和类型与JSON字符串中各个字段的名称和类型一一对应。如果Java对象中的属性与JSON字符串中的字段不匹配,或者JSON字符串中的字段缺失,则可能导致JSON解析出错。

为了确保Java对象中属性的名称和类型与JSON字符串中各个字段的名称和类型一一对应,通常可以采用以下两种方式:

使用注解标记属性和字段名称:在Java对象中为每个属性添加注解,指定属性对应的JSON字符串中的字段名称。例如,使用FastJSON库时可以使用@JSONField注解,如下所示:

public class Person {
    @JSONField(name = "person_name")
    private String name;
    @JSONField(name = "person_age")
    private int age;

    // Getter and Setter
}
在上述示例中,我们为name和age属性添加了@JSONField注解,并指定了对应的JSON字符串中的字段名称。这样在序列化和反序列化时,FastJSON就会按照指定的名称进行映射。

使用命名规范:在Java对象中使用命名规范,使每个属性名称与JSON字符串中的字段名称一一对应。例如,Java对象中的属性采用驼峰命名法,而JSON字符串中的字段采用下划线分割法。在这种情况下,Java对象仅需按照命名规范命名属性,就可以与JSON字符串中的字段一一对应。例如:

public class Person {
    private String personName;
    private int personAge;

    // Getter and Setter
}
在上述示例中,我们使用了驼峰命名法为name和age属性命名。在序列化和反序列化时,FastJSON会自动将其转换为对应的JSON字符串中的字段名称person_name和person_age。

总之,为了确保Java对象中属性的名称和类型与JSON字符串中各个字段的名称和类型一一对应,需要设计良好的Java对象属性命名规范,并在序列化和反序列化时按照命名规范进行字段映射。同时,也可以使用注解等方式明确指定属性和字段名称,提高映射的准确性。