zoukankan      html  css  js  c++  java
  • fastjson的使用——JSON字符串、JSON对象、Java对象的互转

    一、fastjson简介

    fastjson是阿里出品的处理JSON字符串的Java类库,可以对JSON字符串、JSON对象、Java对象进行互相转换
    源码地址:
    https://github.com/alibaba/fastjson

    二、依赖引用

    如果使用的是maven,需要在pom.xml文件中加入依赖:
    <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.78</version>
    </dependency>

    如果使用的是gradle,需要在gradle.build文件中加入依赖:
    implementation("com.alibaba:fastjson:1.2.78")

    三、常用API

    字符串转成JSON对象/数组
    字符串转成JSON对象
    JSON.parseObject(String text)
    JSON.parse(String text)

    字符串转成JSON数组
    JSON.parseArray(String text)
    JSON.parse(String text)


    字符串转成Java对象/列表
    字符串转成Java对象
    JSON.parseObject(String text, Class<T> clazz)

    字符串转成Java对象列表
    JSON.parseArray(String text, Class<T> clazz)


    Java对象/列表转成JSON对象/数组
    Java对象转成JSON对象
    JSONObject.toJSON(Object javaObject)
    JSON.toJSON(Object javaObject)

    Java对象列表转成JSON数组
    JSONArray.toJSON(Object javaObject)
    JSON.toJSON(Object javaObject)


    JSON对象/数组转成Java对象/列表
    JSON对象转成Java对象
    JSON.toJavaObject(JSON json, Class<T> clazz)
    jsonObject.toJavaObject(JSON json) (非静态方法)

    JSON数组转成Java对象列表
    jsonArray.toJavaList(Class<T> clazz) (非静态方法)

    用两张图可以看的更清楚:

    思维导图:

     

    转换图:

    四、示例代码

    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    import java.util.List;
    
    public class FastJSONLearning {
      public static void main(String[] args) {
        String jsonObjectStr = "{"prop":"code","label":"代码","required":true,"key":true}";
        String jsonArrayStr = "[{"prop":"code","label":"代码","required":true,"key":true},{"prop":"explain","label":"中文释义","required":true}]";
    
        // 字符串转成JSON对象/数组
        // 字符串转成JSON对象
        // 方法1
        JSONObject jsonObject1 = JSON.parseObject(jsonObjectStr);
        System.out.println("字符串转成JSON对象: " + jsonObject1);
    
        // 方法2
        JSONObject jsonObject2 = (JSONObject) JSON.parse(jsonObjectStr);
        System.out.println("字符串转成JSON对象: " + jsonObject2);
    
        // 字符串转成JSON数组
        // 方法1
        JSONArray jsonArray1 = JSON.parseArray(jsonArrayStr);
        System.out.println("字符串转成JSON数组: " + jsonArray1);
    
        // 方法2
        JSONArray jsonArray2 = (JSONArray) JSON.parse(jsonArrayStr);
        System.out.println("字符串转成JSON数组: " + jsonArray2);
    
        // 字符串转成Java对象/列表
        // 字符串转成Java对象
        Dict dict = JSON.parseObject(jsonObjectStr, Dict.class);
        System.out.println("字符串转成Java对象: " + dict.toString());
    
        // 字符串转成Java对象列表
        List<Dict> dictList = JSON.parseArray(jsonArrayStr, Dict.class);
        System.out.println("字符串转成Java对象列表: " + dictList.toString());
    
        // Java对象/列表转成JSON对象/数组
        // Java对象转成JSON对象
        // 方法1
        JSONObject jsonObject3 = (JSONObject) JSONObject.toJSON(dict);
        System.out.println("Java对象转成JSON对象: " + jsonObject3.toJSONString());
    
        // 方法2
        JSONObject jsonObject4 = (JSONObject) JSON.toJSON(dict);
        System.out.println("Java对象转成JSON对象: " + jsonObject4.toJSONString());
    
        // Java对象列表转成JSON数组
        // 方法1
        JSONArray jsonArray3 = (JSONArray) JSONArray.toJSON(dictList);
        System.out.println("Java对象列表转成JSON数组: " + jsonArray3.toJSONString());
    
        // 方法2
        JSONArray jsonArray4 = (JSONArray) JSON.toJSON(dictList);
        System.out.println("Java对象列表转成JSON数组: " + jsonArray4.toJSONString());
    
        // JSON对象/数组转成Java对象/列表
        // JSON对象转成Java对象
        // 方法1
        Dict dict1 = JSON.toJavaObject(jsonObject1, Dict.class);
        System.out.println("JSON对象转成Java对象: " + dict1);
    
        // JSON对象转成Java对象
        // 方法2
        Dict dict2 = jsonObject1.toJavaObject(Dict.class);
        System.out.println("JSON对象转成Java对象: " + dict2);
    
        // JSON数组转成Java对象列表
        List<Dict> dictList1 = jsonArray1.toJavaList(Dict.class);
        System.out.println("JSON数组转成Java对象列表: " + dictList1);
      }
    }
    

      

  • 相关阅读:
    struct 结构体解析(原)
    C++标准编程:虚函数与内联
    基于 IOCP 的通用异步 Windows Socket TCP 高性能服务端组件的设计与实现
    直接用编译器按ctrl+F5运行和双击运行结果不一样
    驱动编译的时候注意编译工程选项
    驱动编译的时候注意编译工程选项
    'ddkbuild.cmd' 不是内部或外部命令,也不是可运行的程序
    'ddkbuild.cmd' 不是内部或外部命令,也不是可运行的程序
    NtOpenProcess被HOOK,跳回原函数地址后仍然无法看到进程
    NtOpenProcess被HOOK,跳回原函数地址后仍然无法看到进程
  • 原文地址:https://www.cnblogs.com/lasdaybg/p/15144350.html
Copyright © 2011-2022 走看看