json字符串和Java对象的相互转换:JSONObject.parseObject()

大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。

在开发中,我们会经常遇见将java对象转换成json字符串以及将json字符串转换成对象的操作,使用 JSONObject.parseObject() 和JSONObject.toJSONString() 方法来实现这个过程。本文将介绍这两个方法的作用以及如何在 Java 中使用它们进行对象与 JSON 字符串之间的转换。

随着分布式系统和服务之间的通信变得日益普遍,将对象转换为 JSON 字符串以及将 JSON 字符串转换为对象变得至关重要。fastjson 库是阿里巴巴开源的一款高性能、功能丰富的Java JSON 库,提供了简单而灵活的方式来实现对象与 JSON 字符串之间的转换,所以首先 pom.xml 要引入fastjson 版本依赖:

<dependencies>
        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>fastjsonartifactId>
            <version>1.2.54version>
        dependency>
dependencies>

将json字符串转换成对象:JSONObject.parseObject()

JSONObject.parseObject() 方法用于将 JSON 字符串转换为 Java 对象。它接受两个参数:要解析的 JSON 字符串和目标 Java 类的 Class 对象。该方法会根据 JSON 字符串的内容将其转换为相应的 Java 对象。

  1. 第一种,只传入 jasn 字符串:JSONObject.parseObject(str)
    使用get(key) 方法获取json字符串里面具体某个对象的vaue值:
public static void main(String[] args) {
        /*
            {
                "id":"1",
                "name":"tom",
                "age":"18",
                "tel":"130"
            }
         */
        String jsonStr = "{\n" +
                "\t\"id\":\"1\",\n" +
                "\t\"name\":\"tom\",\n" +
                "\t\"age\":\"18\",\n" +
                "\t\"tel\":\"130\"\n" +
                "}";
        JSONObject jsonObj = JSONObject.parseObject(jsonStr);// 将json字符串转换成对象
        String name = jsonObj.get("name").toString();
        System.out.println(name);// name = "tom"
    }
  1. 第二种,传入目标 Java 类的 Class 对象:JSONObject.parseObject(str, xxx.class)

这种写法可以将 json 字符串的值解析到返回的 class 对象上,并且只映射class 对象上有的字段,没有的字段则为 null,例如下面的 id 是 int 类型,但是 json 是 string 类型的,也会给转义成 int 类型;json 没有 address 字段,所以 class 对象的 address 值为 null;

一般这种写法常见于前端发起请求进来,传入大量字符串,后端处理所需字段值

@Data
class Students {
    private String name;

    private String address;

    private int id;
}

public static void main(String[] args) {
        /*
            {
                "id":"1",
                "name":"tom",
                "age":"18",
                "tel":"130"
            }
         */
        String jsonStr = "{\n" +
                "\t\"id\":\"1\",\n" +
                "\t\"name\":\"tom\",\n" +
                "\t\"age\":\"18\",\n" +
                "\t\"tel\":\"130\"\n" +
                "}";
        Students student = JSONObject.parseObject(jsonStr, Students.class);// 将json字符串转换成对象
        System.out.println(student);// Students(name=tom, address=null, id=1)
    }

将对象转成json字符串:JSONObject.toJSONString()

该方法接受一个参数,即要转换为JSON字符串的Java对象。它会将Java对象的属性转换为对应的JSON字段,并生成相应的JSON字符串。

public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        map.put("id","1");
        map.put("name","jack");
        map.put("age","18");
        String jsonString = JSONObject.toJSONString(map);// 将对象转换成json字符串
        System.out.println(jsonString);// {"name":"jack","id":"1","age":"18"}
    }

JSONObject 和 JSON

JSONObject 源码如下:可以发现 JSONObject 继承了 JSON

public class JSONObject extends JSON implements Map<String, Object>, Cloneable, Serializable, InvocationHandler {
	// ...
}

JSON源码如下:是一个抽象类

public abstract class JSON implements JSONStreamAware, JSONAware {
	// ...
	public static JSONObject parseObject(String text, Feature... features) {
        return (JSONObject)parse(text, features);
    }
}

JSON是一个抽象类,JSON 中有一个静态方法 parseObject(),将 text 解析为一个 JSONObject 对象并返回;JSONObject 是一个继承 JSON 的类,当调用 JSONObject.parseObject() 时,会直接调用父类的parseObject() 。两者在方法的调用上来说没什么区别,一个是用父类去调用父类自己的静态的 parseObject() 方法,一个是子类 JSONObject 去调用父类 JSON 的静态 parseObject() 方法,两者调的是同一个方法。

最后

在使用这两个方法时,我们需要注意目标 Java 类的定义和属性与 JSON 字符串的结构和字段之间的对应关系。确保属性名和数据类型匹配,以便正确地进行转换。

在 Java 中使用它们进行对象与 JSON 字符串之间的转换,通过灵活运用这两个方法,可以更加便捷地处理 JSON 数据,提升Java编程的开发效率和性能。

你可能感兴趣的:(学习笔记,java,json,string,JSONObject,Object)