fastjson简介

fastjson 是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。比较牛的是下面这句话

fastjson 相对其他 JSON 库的特点是快,从 2011 年 fastjson 发布1.1.x版本之后,其性能从未被其他 Java 实现的 JSON 库超越

附上其 maven 库坐标

com.alibaba

fastjson

1.2.61

什么是 JSON

在最开始接触 JSON 的时候,不太明白 JSON 的概念,感觉很笼统

其实 JSON 就是一种轻量级的数据交换格式,被广泛应用于 WEB 应用程序开发

1.1 JSON 的优势

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

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

有效的提升网络传输效率

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

1.2 JSON 对象

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

{

"area": "山东菏泽",

"name": "马马马马马百万",

"age": 25

}

JSON 数组

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

[{

"area": "广东",

"name": "山溪",

"age": 25

}, {

"area": "沙西",

"name": "马希泰",

"age": 26

}]

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

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

[{

"area": "江苏",

"name": "徐州",

"age": 25

}, {

"drugCode": "HXUDP000000000000MED0000342809",

"dosformName": "注射",

"drugName": "打点滴"

}]

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, Cloneable, Serializable, InvocationHandler {

private static final long serialVersionUID = 1L;

private static final int DEFAULT_INITIAL_CAPACITY = 16;

private final Map map;

public JSONObject(){

this(DEFAULT_INITIAL_CAPACITY, false);

}

public JSONObject(Map 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", "注射剂");

什么是 JSONArray

其实刚才拿 List 与 Object 关系举例是有迹可查的

仅针对于 fastjson 而言,因为没看别的具体实现,怕被喷。含蓄点的好

存放数据的容器就是一个 List 的类型,默认创建为 ArrayList ,但不仅限于

public class JSONArray extends JSON implements List, Cloneable, RandomAccess, Serializable {

private static final long serialVersionUID = 1L;

private final List list;

protected transient Object relatedArray;

protected transient Type componentType;

public JSONArray(){

this.list = new ArrayList();

}

public JSONArray(List list){

this.list = list;

}

public JSONArray(int initialCapacity){

this.list = new ArrayList(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);

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", "马马马马马百万");

person.put("age", 25);

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

结束语

上述文章中并没有涉及到复杂 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]

}

}

关于 JSON格式化 相关的网站

JSON解析及格式化个性网站 | 可以解析JSON及XML字符串的网站

关于 JSON 类库项目地址

Json-lib | Gson | Jackson | FastJson

关于性能测试

性能测试的话可以在网上找些文章或者自己来验证下,可以从不同的类型、数量多少等多维度测试

fastjson list转json字符串_程序员:JSON、JSONObject 与 JSONArray 简单讲解相关推荐

  1. 谷歌json插件_程序员必备的4款Chrome插件,妥妥的神器!

    之前就粉丝跟小编说,想要推荐几款程序员使用的插件,所以小编就去找了找,发现了这4款当下比较热门且实用的,也是程序员经常用到的,这几款插件也可以提高工作效率,难怪隔壁小哥哥程序员的效率都挺高,估计也用了 ...

  2. js json编辑器_程序员必备编辑器 —— Visual Studio Code

    前言 我刚入行Web前端的时候,我先后使用过Notepad++.Sublime Text. Hbuilder IDE.Webstorm进行Web前端开发,偶然的机会了解到Atom.Visual Stu ...

  3. java处理json字符串_常见java对象转换为json字符串处理!!!

    1.JSON简介 1. 概念: JavaScript Object NotationJavaScript对象表示法 Person p = new Person(); p.setName("张 ...

  4. 【源码+演示】高考加油!HTML+CSS特效文字祝福_程序员祝福高考学子旗开得胜!

    又是一年盛夏至,愿高三学子高中毕业日,即是高中名校时! 本篇为大家带来3款HTML+CSS制作出的小项目,为高考学子加油助威,愿他们旗开得胜,金榜题名![源码+演示]高考加油!HTML+CSS特效文字 ...

  5. mysql json 引号 双引号_关于JSON字符串key缺少双引号的解决方法 的讲解

    JSON字符串key缺少引号的解决方法 JSON字符串是key:value形式的字符串,正常key是由双引号括起来的. 例如:<?php $data = array('name'=>'fd ...

  6. c语言sin程序怎么写_程序员求职简历,项目经验怎么写?免费修改简历并提供简历模板...

    我是一个典型的互联网公司程序员,在BAT有超过10年的工作经验,面试超过200个程序员.也见过无数的程序员简历,包括很多优秀的程序员简历,看了可以让人眼前一亮,优美简洁的简历模板,项目经验工作重点突出 ...

  7. c# 解析json 字符串 报异常 Bad JSON escape sequence 解决方案

    c# 解析json 字符串 报异常 Bad JSON escape sequence 解决方案 参考文章: (1)c# 解析json 字符串 报异常 Bad JSON escape sequence ...

  8. json java 数据类型_程序员都应该了解的一种数据格式之 JSON

    原标题:程序员都应该了解的一种数据格式之 JSON 作者 | 猪哥 责编 | maozz JSON的诞生原因是因为XML整合到HTML中各个浏览器实现的细节不尽相同,所以道格拉斯·克罗克福特(Doug ...

  9. java 字符串转骆驼命名_程序员必知的Java基础:5条命名规范和8种数据类型归纳...

    原标题:程序员必知的Java基础:5条命名规范和8种数据类型归纳 一.Java命名规范 任何一种语言都有一套针对于语言自身的命名的规范,java也不例外.接下来,我就列举一下java对命名的规范. 下 ...

最新文章

  1. ios开发学习笔记--Core Motion
  2. 巨杉数据库:金融级数据库是怎样炼成的
  3. Android 服务(Service)
  4. 互联网又一个变态条款 “奋斗者协议”
  5. AsyncTask 异步任务基本使用-下载视频
  6. keil4如何将c语言转换成汇编语言_Keil 中关于C语言编译生成汇编代码函数名规则...
  7. 中标麒麟(linux)下Qt调用python数据转换
  8. oracle数据库: ORA-01775: 同义词的循环链问题
  9. 【Verilog】马里奥小游戏的FPGA实现
  10. 输入在第一行中给出一个正整数n(1)。第二行输入n个整数,用空格分开。在一行中输出最大值及最大值的最小下标,中间用一个空格分开。
  11. Django和DRF - 邱乘屹的个人技术博客
  12. 小说中场景的功能_一般文章里的场景描写有什么作用啊详细一些的 最好在
  13. 如何提取北京住房公积金
  14. 复杂网络上的传播动力学
  15. Unity 2020.3.17 从UnityHub下载安装失败(含Android)
  16. vue 实现简单表格分页功能
  17. JAVA里面一加到一百等于多少_1加到100计算公式1加到23等于多少
  18. 从零开始的博客建站之旅——准备工作
  19. 2020女生适合学什么设计
  20. 骑士放置 最大独立集

热门文章

  1. wxWidgets:wxStdInputStream类用法
  2. boost::statechart模块实现状态迭代测试
  3. boost::range_category和boost::iterator_category相关的测试程序
  4. boost::mp11::mp_map_keys相关用法的测试程序
  5. boost::phoenix::function用法的测试程序
  6. boost::coroutine模块实现相同的边缘的测试程序
  7. boost::to_address用法实例
  8. ITK:读取DICOM系列并写入3D图像
  9. DCMTK:定义信号灯,互斥锁和读/写锁的类
  10. VTK:相互作用之InteractorStyleTerrain