当前位置:   article > 正文

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

json字符串转换为java对象

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

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

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

<dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.54</version>
        </dependency>
</dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

将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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  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)
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

将对象转成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"}
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

JSONObject 和 JSON

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

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

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

public abstract class JSON implements JSONStreamAware, JSONAware {
	// ...
	public static JSONObject parseObject(String text, Feature... features) {
        return (JSONObject)parse(text, features);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

最后

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/435058
推荐阅读
相关标签
  

闽ICP备14008679号