JSON、JSONObject 与 JSONArray 详细介绍及其应用方式

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>

1 什么是 JSON

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

1.1 JSON 的优势

  • JSON简洁 和 清晰的层次结构
  • 易于人阅读和编写,同时也易于机器解析和生成
  • 有效的提升网络传输效率
  • 支持多种语言,很多流行的语言都对 JSON 格式有着很友好的支持

1.2 JSON 对象

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

{
    "area": "山东菏泽",
    "name": "马马马马马百万",
    "age": 25
}

1.3 JSON 数组

JSON 数组其实就是包含了多个 JSON 对象的一个集合,数组是以 数组括号 [] 括起来的

[{
    "area": "山东菏泽",
    "name": "马马马马马百万",
    "age": 25
}, {
    "area": "河南周口",
    "name": "马龙台",
    "age": 26
}]

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

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

[{
    "area": "山东菏泽",
    "name": "马马马马马百万",
    "age": 25
}, {
    "drugCode": "HXUDP000000000000MED0000342809",
    "dosformName": "注射剂",
    "drugName": "盐酸丁卡因注射液"
}]

1.4 JSON、JSON对象、JSON数组区别

JSON 呢只是一种宏观上的叫法,可以理解为是一种数据结构,就像 xml 结构一样,是一种规约性内容;而 JSON 对象则是对 JSON 的具体体现;JSON 数组则是将多个 JSON 对象进行存储的一个集合,可以想象成 Java 中的 ListObject 的关系

2 什么是 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", "马马马马马百万");
person.put("age", 25);
person.put("area", "山东菏泽");

JSONObject drug = new JSONObject();
drug.put("drugName", "盐酸丁卡因注射液");
drug.put("drugCode", "HXUDP000000000000MED0000342809");
drug.put("dosformName", "注射剂");

3 什么是 JSONArray

其实刚才拿 ListObject 关系举例是有迹可查的

仅针对于 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 的平常使用方法

内心独白:不就是一个 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);

4 Fastjson 的简单应用

4.1 将对象转换为json字符串

import com.alibaba.fastjson.JSON;

String jsonStr = JSON.toJSONString(person);

4.2 将json字符串转换为JSONObject对象

JSONObject jsonObject = JSON.parseObject(jsonStr);

4.3 将JSONObject 转换为对象

JSONObject person = new JSONObject();
person.put("name", "马马马马马百万");
person.put("age", 25);

Student stuObj = JSON.toJavaObject(person, Student.class);

5 结束语

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

{
    "article": {
        "row": 1024,
        "lastUpdateTime": "2019-12-13 19:27:59",
        "Title": "Java 中 JSONArray 与 JSONObject 详细介绍结构及应用",
        "images": {
            "Url": "http://www.images.com",
            "Height": 256,
            "Width": "256"
        },
        "sections": [17, 18, 19, 20]
    }
}

原文地址:https://www.cnblogs.com/wdbka/p/12040450.html

时间: 2024-07-31 13:05:15

JSON、JSONObject 与 JSONArray 详细介绍及其应用方式的相关文章

JSON JSONObject.fromObject JSONArray.fromObject

public static void test1(){ Person person = new Person(); person.setName("zs"); person.setAge(20); JSONObject json = JSONObject.fromObject(person); String str = json.toString(); System.out.println(str); } public static void test2(){ Person perso

net.sf.json JSONObject与JSONArray使用实例

实例自己想的一个实例应用场景:一个人可以有多个角色,例如:在家中是儿子,在学校是学生,在公司是程序员,一个人还可以办好多业务 * 每个业务好多个人都可以办,则标记(mark)就是记录这唯一标识的(如id)业务和称职 1.人实体类(People) package com.hsinfo.web.Demo; import java.util.Set; /** * @Description:人的实体类 * @date 2018年7月22日,下午8:58:03 */ public class People

Java生成json串、JSONObject与JSONArray的使用

1.JAR包简介 要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包: commons-lang.jar commons-beanutils.jar commons-collections.jar commons-logging.jar ezmorph.jar json-lib-2.2.2-jdk15.jar 2.JSONObject对象使用 JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转

JSONObject和JSONArray解析和构造json字符串

JSON-lib包(最关键的两个类分别是JSONObject和JSONArray)完成对json的构造和一些基本方法的使用. 二者区别: ①JSONObject构造的字符串是键值对形式(key:value),多个键值对间以英文逗号连接: ②JSONArray构造的字符串是数组形式([array1,array2,...]). 需要使用的包下载链接:http://pan.baidu.com/s/1o7MZ8X8 一.JSONObject的使用. (1)JSON字符串的两种构造方法: ①使用Java对

json:JSONObject与JSONArray的使用

1.JAR包简介 要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包: commons-lang.jar commons-beanutils.jar commons-collections.jar commons-logging.jar ezmorph.jar json-lib-2.2.2-jdk15.jar 2.JSONObject对象使用 JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转

json学习系列(6)JSONObject和JSONArray是JDK的集合部分延伸

我一直觉得JSONObject和JSONArray是JDK集合部分的延伸,它们与JDK的List和Map一脉相承.通过研究JSONObject和JSONArray的结构,我们顺便也复习一下JDK的内容. 首先看一下JSONObject和JSONArray 的结构: final class JSONObject extends AbstractJSON implements JSON, Map, Comparable final class JSONArray extends AbstractJS

json 的解析-使用Android中的JSONObject和JSONArray解析json数据

1.代码 public class MainActivity extends Activity { TextView tv_json; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv_json = (TextView) findViewById(R.id.tv_j

json处理简解[JSONObject、JSONArray]

json处理目前有已经成熟使用的jar能够支持相关处理,json-lib 常用方法为put.putAll.addput方法传参为:key.value/jsonObject 支持json对象赋值和包装子json串(即json串赋值中value值可以为一个json对象)putAll方法传参为:jsonObject 支持json对象赋值(将一个json对象直接赋值给另外一个)add方法传参为数组位置和数组对象add(int index, Object value) soapui使用示例: json对象

js中的json对象详细介绍

JSON一种简单的数据格式,比xml更轻巧,在JavaScript中处理JSON数据不需要任何特殊的API或工具包,下面为大家详细介绍下js中的json对象, 1.JSON(JavaScript Object Notation)一种简单的数据格式,比xml更轻巧.JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API或工具包. JSON的规则很简单:对象是一个无序的“‘名称:值'对”集合.一个对象以“{”(左括号)开始,“}”(右括号)结束