美文网首页转载部分
聊一聊JSON|JSONObject | JSONArray

聊一聊JSON|JSONObject | JSONArray

作者: Coding测试 | 来源:发表于2020-05-09 09:04 被阅读0次

    fastjson简介

    fastjson 是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。比较牛的是下面这句话
    fastjson 相对其他 JSON 库的特点是快,从 2011 年 fastjson 发布1.1.x版本之后,其性能从未被其他 Java 实现的 JSON 库超越

    附上其 maven 库坐标

    <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.61</version>
    </dependency>
    

    什么是 JSON

    在最开始接触 JSON 的时候,不太明白 JSON 的概念,感觉很笼统
    其实 JSON 就是一种轻量级的数据交换格式,被广泛应用于 WEB 应用程序开发

    • JSON 的优势

      • JSON 的简洁 和 清晰的层次结构

      • 易于人阅读和编写,同时也易于机器解析和生成

      • 有效的提升网络传输效率

      • 支持多种语言,很多流行的语言都对 JSON 格式有着很友好的支持

    • JSON 对象

    这就是一个平常使用的 JSON 对象,特征就是多个属性是被 {} 括起来的

    {
    "error": "1000",
    "mages": "success",
    "code": 200
    }
    
    • JSON 数组
      JSON 数组其实就是包含了多个 JSON 对象的一个集合,数组是以 数组括号 [] 括起来
    [{
      "description":"这是一个带参数的post请求,请求参数格式是key:value,不能使用queries,要使用forms",
      "request":{
        "uri":"/postjson",
        "method":"post",
        "json":{
          "name":"codingtest",
          "age":"29"
        }}
    }]
    

    JSON 数组并一定是要相同的 JSON 对象的集合,也可以是不同的对象,不过我在开发过程中并没有这么使用过,感觉挺别扭的。因为如果将多个对象放进一个 JSONArray 中的话,下意识认为是相同类型的集合

    下面这种类型也是正确的 JSON 数组格式

    [{
      "description":"这是一个带参数的post请求,请求参数格式是key:value,不能使用queries,要使用forms",
      "request":{
        "uri":"/postjson",
        "method":"post",
        "json":{
          "name":"codingtest",
          "age":"29"
        }},
      "response":{
        "json":{
          "error":"1000",
          "mages":"success"
        },
        "headers":{
          "Content-Type":"application/json;charset=gbk"
        }
      }
    }
    ]
    
    • JSON、JSON对象、JSON数组区别
      JSON 呢只是一种宏观上的叫法,可以理解为是一种数据结构,就像 xml 结构一样,是一种规约性内容;而 JSON 对象则是对 JSON 的具体体现;JSON 数组则是将多个 JSON 对象进行存储的一个集合,可以想象成 Java 中的 List 和 Object 的关系

    什么是 JSONObject

    JSONObject 是根据 JSON 形式在 Java 中存在的对象映射
    各大 JSON 类库的 JSONObject 内部实现也是不太一样的。这里以 fastjson 举例

    public class JSONObject extends JSON implements Map<String, Object>, Cloneable, Serializable,  InvocationHandler {
    private static final long serialVersionUID = 1L;
    private static final int DEFAULT_INITIAL_CAPACITY = 16;
    private final Map<String, Object> map;
    public JSONObject(){
    this(DEFAULT_INITIAL_CAPACITY, false);
    }
    public JSONObject(Map<String, Object> map){
    if (map == null) {
    throw new IllegalArgumentException("map is null.");
    }
    this.map = map;
    }
    ...
    }
    

    可以看到 就是对 HashMap 的一层封装,并提供了一些个性化方法。有兴趣的话可以去研究下源码实现,这里就不一一解读了

    其使用方式和 HashMap 并无太大区别

    JSONObject person = new JSONObject();
    person.put("name", "codingtest");
    person.put("age", 29);
    person.put("area", "北京");
    JSONObject drug = new JSONObject();
    drug.put("drugName", "case1");
    drug.put("drugCode", "20200508");
    drug.put("dosformName", "pass");
    

    什么是 JSONArray

    • 其实刚才拿 List 与 Object 关系举例是有迹可查的
    • 仅针对于 fastjson 而言,阿里开源修复很多的漏洞。
    • 大致解释是存放数据的容器就是一个 List 的类型,默认创建为 ArrayList
    public class JSONArray extends JSON implements List<Object>, Cloneable, RandomAccess, Serializable {
    private static final long serialVersionUID = 1L;
    private final List<Object> list;
    protected transient Object relatedArray;
    protected transient Type componentType;
    public JSONArray(){
    this.list = new ArrayList<Object>();
    }
    
    public JSONArray(List<Object> list){
    this.list = list;
    }
    
    public JSONArray(int initialCapacity){
    this.list = new ArrayList<Object>(initialCapacity);
    }
    ...
    }
    
    

    JSONArray 的平常使用方法

    JSONArray :实际上就是一个 List 中 套了个 Map 类结构嘛 对不对 ?看看就知道啦

    JSONObject person = new JSONObject();
    person.put("name", "马马马马马百万");
    JSONObject drug = new JSONObject();
    drug.put("drugName", "盐酸丁卡因注射液");
    JSONArray array = new JSONArray();
    array.add(person);
    array.add(drug);
    

    Fastjson 的简单应用

    • 将对象转换为json字符串
    import com.alibaba.fastjson.JSON;
    String jsonStr = JSON.toJSONString(person);
    
    • 将json字符串转换为JSONObject对象
    JSONObject jsonObject = JSON.parseObject(jsonStr);
    
    • 将JSONObject 转换为对象
    JSONObject person = new JSONObject();
    person.put("name", "codingtest");
    person.put("age", 29);
    
    Student stuObj = JSON.toJavaObject(person, Student.class);
    

    结束语

    上述文章中并没有涉及到复杂 JSON 对象,只是为了前期理解没有举例
    下述 JSON 中涉及到了 数值、字符串、内置 JSON 对象、数组

    {
      "article": {
      "row": 1024,
      "lastUpdateTime": "2020-05-08 18:27:59",
      "Title": "Java 中 JSONArray 与 JSONObject 详细介绍结构及应用",
      "images": {
      "Url": "https://www.jianshu.com/u/acf637a73f52",
      "Height": 500,
      "Width": "500"
      },
      "sections": [110, 120, 119, 114]
      }
    }
    
    • 关于 JSON格式化 相关的网站传送门
    • 关于 JSON 类库项目地址

    Json-lib | Gson | Jackson | FastJson


    • 更多测试技术分享、学习资源以及一些其他福利可关注公众号:【Coding测试】获取:
    Coding测试

    相关文章

      网友评论

        本文标题:聊一聊JSON|JSONObject | JSONArray

        本文链接:https://www.haomeiwen.com/subject/acofnhtx.html