Json和FastJson的使用

Json和FastJson的使用

前言

今儿来总结一下JSON还有其解析工具,解析工具有好几种,初学掌握一种就可以了,容易混

一、JSON是什么?

1.概念

JSON(JavaScript Object Notation) 指的是 JavaScript表示’对象’的格式

2.下面说明俩个问题

一、json字符串和Java字符串的区别?
JSON字符串和Java字符串本质上是没有区别的,JSON字符串就是JAVA字符串,只不过是JSON格式的字符串

二、JSON的俩大类型:JSON对象,JSON数组 (都是键值对的形式)
1. JSON对象:用{ }表示
eg:{“score”:100,“sex”:“男”,“name”:“张三”,“age”:12}
2. JSON数组:用 [ ] 表示,由多个json对象组成,
eg:[{“score”:100,“sex”:“男”,“name”:“张三”,"age"12},{“score”:100,“sex”:“男”,“name”:“李四”,“age”:12}]
3.复杂点的:JSON对象+JSON数组
{“score”:10,“subject”:[{“subjectNum”:“001”,“subjectName”:“语文”},{“subjectNum”:“002”,“subjectName”:“数学”}],“sex”:“男”,“name”:“张三”,“age”:12}

二、使用步骤

1.引入依赖

<!-- fastjson的依赖 -->
<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>fastjson</artifactId>
     <version>1.2.44</version>
 </dependency>

2.实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Subject {
    private String subjectName;
    private String subjectNum;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
    private String name;
    private Integer age;
    private char sex;
    private Integer score;
    private List<Subject> subject;
}

3.测试(详解FastJson)

字符串与Json对象的相互转化

  1. 字符串转Json对象( 反序列化 )JSONObject.parseObject(str)
  2. Json对象转字符串( 序列化 ) JSONObject.toJSONString(obj)
    public void jsonStringToJsonObject(){
        // 字符串转json对象 结果:{"score":100,"sex":"男","name":"张三","age":12}
        String zhangSanString = "{\"score\":100,\"sex\":\"男\",\"name\":\"张三\",\"age\":12}";
        JSONObject zhangSanJsonObject = JSONObject.parseObject(zhangSanString);
        System.out.println(zhangSanJsonObject);
        // json对象转字符串 结果:{"score":100,"sex":"男","name":"张三","age":12}
        String zhangSanJsonString = JSONObject.toJSONString(zhangSanJsonObject);
        System.out.println(zhangSanJsonString);
	}

实体类与Json的转化

  1. JSon转实体类
    JSONObject.toJavaObject(JsonObj, Student.class);
    JSONObject.parseObject(JsonStr, Student.class);
    JSONObject.parseObject(JsonStr, new TypeReference< Student >() {});
  2. 实体类转JSon JSONObject.toJSON(JavaObj)

注意:反序列化时为对象时,必须要有默认无参的构造函数,否则会报异常:

    /**
     * 实体类与Json的转化
     */
    @Test
    public void JsonObjTOJavaObj(){

        Student student = new Student("张三", 12, '男', 10,null);
        // Java对象转化Json对象 结果:{"score":100,"sex":"男","name":"张三","age":12}
        JSONObject studentJsonObject = (JSONObject) JSONObject.toJSON(student);
        System.out.println(studentJsonObject);
        // json对象转Java对象
        // 方式一:结果:Student(name=张三, age=12, sex=男, score=100, subject=null)
        Student student1 = JSONObject.toJavaObject(studentJsonObject, Student.class);
        System.out.println(student1);
        // 方式二:相当于:json对象->json字符串->Java对象 结果:Student(name=张三, age=12, sex=男, score=100, subject=null)
        Student student2 = JSONObject.parseObject(String.valueOf(studentJsonObject), Student.class);
        System.out.println(student2);
        // 方式三:结果:Student(name=张三, age=12, sex=男, score=100, subject=null)
        Student student3 = JSONObject.parseObject(String.valueOf(studentJsonObject), new TypeReference<Student>() {
        });
        System.out.println(student3);
        
    }

下面介绍复杂格式的JSON情况,

  1. 实体类转复杂格式的JSON
  2. JsonObject转化为JsonArrary (主要看这种)
  3. 将JsonArray转化为List
    /**
     * 复杂JSON格式:
     * 实体类转JSONObject
     * JsonObject转化为JsonArrary(主要)
     * 将JsonArray转化为List
     */
    @Test
    public void pojoToJson(){
        ArrayList<Subject> subjects = new ArrayList<>();
        subjects.add(new Subject("语文","001"));
        subjects.add(new Subject("数学","002"));
        Student zhangSan = new Student("张三", 12, '男', 10,subjects);
        // 实体类转JSONObject 
        // 结果:{"score":10,"subject":[{"subjectNum":"001","subjectName":"语文"},{"subjectNum":"002","subjectName":"数学"}],"sex":"男","name":"张三","age":12}
        JSONObject zhangSanJsonObj = (JSONObject) JSONObject.toJSON(zhangSan);
        System.out.println(zhangSanJsonObj);
        // JsonObject转化为JsonArrary
        JSONArray subjectArray = zhangSanJsonObj.getJSONArray("subject");
        // 将JsonArray转化为List 
        // 结果:Subject(subjectName=语文, subjectNum=001)  Subject(subjectName=数学, subjectNum=002)
        List<Subject> subject =JSONObject.parseArray(subjectArray.toJSONString(), Subject.class);
        for (Subject s : subject) {
            System.out.println(s);
        }
    }

三、还是看不懂,推荐下面2篇博客

使用FastJson对JSON字符串、JSON对象及JavaBean之间的相互转换
json的处理之FastJson的处理

list转json对象使用FastJSON可以通过以下步骤完成: 1. 导入FastJSON库并创建一个空的JSON对象。 2. 遍历list,将list中的每个元素转换为JSON对象。 3. 将转换后的JSON对象添加到前面创建的空JSON对象中。 4. 最后将整个JSON对象转换为json字符串。 代码示例: import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import java.util.List; public class Main { public static void main(String[] args) { List<String> list = List.of("item1", "item2", "item3"); JSONObject jsonObject = new JSONObject(); JSONArray jsonArray = new JSONArray(); for (String item : list) { JSONObject itemObject = new JSONObject(); itemObject.put("item", item); jsonArray.add(itemObject); } jsonObject.put("list", jsonArray); String jsonString = jsonObject.toJSONString(); System.out.println(jsonString); } } 以上代码将会将List<String> list转换为一个JSON对象,该对象中包含一个名为"list"的JSON数组,该数组包含了list中的每个元素的JSON对象。 希望以上解答能对你有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [list转json字符串 FastJSON 调用](https://download.csdn.net/download/trouble0914/85414476)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [fastjson list转json字符串_一篇文章教你轻松使用fastjson](https://blog.csdn.net/weixin_39804329/article/details/110245434)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值