一、什么是JSON

1、【定义】

JSON(JavaScript Object Notation)是JavaScript对象表示法,用于存储和交换文本信息的语法,类似XML,但比XML更小、更灵活。它是独立的语言,具有自我描述性,所以更易理解。

JSON使用JavaScript语法来描述数据对象,但SJON仍然独立于语言平台。JSON解析器和JSON库支持许多不同的编程语言。

2、【例子】

{

"employees":[

{"fristName": "Li", "lastName":"min"},

{"fristName": "Zhang", "lastName":"feng"},

{"fristName": "Li", "lastName":"yunfeng"},

]

}

这个例子中,对象"employee"包含三个对象数组,其中数组中的每个对象代表一个人名称信息。

3、【语法】

JSON语法是JavaScript对象表示法语法的子集:

(1)数据在键值对中

(2)数据由逗号分隔

(3)花括号保存对象

(4)方括号保存数组

4、【理解】

(1)数据在键值对中

这里的“数据”可以理解为“数据值”,比如键值对"firstName":"Li",数据(值)为Li,它相当于java语句的String firstName = "Li"。其中数据可以是整数或浮点数,也可以是字符串(在双引号中),亦可以是布尔值(true或false)、数组(在方括号中)、对象(右花括号中)和null。

(2)数据由逗号分隔

例如"firstName":"Li","lastName":"min",这两个键值对使用逗号隔开,相当于定义了两个变量:

String firstName = "Li";

String lastName = "min";

(3)花括号保存对象

例如{"firstName":"Li", "lastName":"min"}就是一个对象,使用java可这样理解

private class Employee

{

String firstName = null;

String lastName = null;

public Employee(String firstName, String lastName)

{

this.firstName = firstName;

this.lastName = lastName;

}

}

其中{"firstName":"Li", "lastName":"min"}相当于new Employee("Li", "min")

(4)方括号保存数组

例如"employees":[{"fristName": "Li", "lastName":"min"},{"fristName": "Li", "lastName":"yunfeng"}]就是一个数组,使用java可这样理解

Employee employee1 = new Employee("Li", "min");

Employee employee2 = new Employee("Li", "yunfeng");

Employee[] employees = new Employee[]{employee1, empolyee2};

5、【备注】

关于JSON的基本知识可能见w3school,网址http://www.w3school.com.cn/json/index.asp

二、JSON解析器

聪明的你一定会想JSON结构是否可以转换为java对象?答案是肯定的,这正是该文重点讲解的内容。既然JSON是一个字符串,那么完全可以自己对字符串解析,当然重新发明轮子的事尽量少做,除非新发明的轮子更合理。现有的轮子:

(1)JSON官方网站提供了官方的Java实现(org.json),用于解析和系列化。

(2)StringTree,这个解析器的特点“简单”,JSONReader负责解析 、JSONWriter负责序列化。

(3)JSEL,不仅可以解析同时还可以处理JSON中的注释,甚至内处理一些简单的表达式,接口简单、性能不错。

除此之外,还有大名鼎鼎的jackson、GSON等等。

至于GSON与其它解析器之间的优缺点对比,请读者自己进行测试验证。

三、GSON使用说明简介

1、【GSON简介】

GSON是用于Json和Java对象之间相互转换的类库,即便Java类的源码还未实现,它是一个开源项目,其网址为http://code.google.com/p/google-gson。


此处读者可能存在疑惑,Java类的源码还未实现,通过GSON就可以转换为这个Java对象?用个例子说明吧:

(1)有一个JSON字符串{name:'GREETINGS', source:'guest'}

(2)若把这个JSON结构转换为一个Demo对象,通常会为Demo类定义两个字段name和source,但下面的Demo类定义并没有name和source字段定义实现,如下:

public class Demo

{

}

(3)运行测试方法会发现可正常工作

public static void main(String[] args)

{

String s = "{name:'GREETINGS', source:'guest'}";

Gson gson = new Gson();

Demo demo = gson.fromJson(s, Demo.class);

}


2、【Gson目标】

可以使用new Gson()或GsonBuilder的create()方法创建GSON对象,由于GSON对象不会保存状态,用户可以无限制地对JSON进行序列化和反序列化操作。通过GSON对象可以轻易实现如下功能:

(1)输出简洁易读的JSON代码

(2)支持任意复杂的对象

(3)允许用户对特殊的表达式进行转换

(4)提供尽量简单的装配操作,就像操作构造器和toString()方法一样在JSON和Java对象之间切换。

【Gson】【1】Gson使用简介相关推荐

  1. 你真的会用Gson吗?Gson使用指南(三)

    2019独角兽企业重金招聘Python工程师标准>>> 本文为作者根据日常使用结合Gson源码注释及wiki所作的原创内容,转载请注明出处. 该系列其它文章 你真的会用Gson吗?G ...

  2. gson java,Gson版本支持

    本篇文章帮大家学习Gson版本支持,包含了Gson版本支持使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. Gson提供了rollNo和name,稍后将其添加为一个新变量. ...

  3. java gson fromjson,Gson的fromJson()方法

    Gson提供了fromJson()方法来实现从Json相关对象到java实体的方法. 在日常应用中,我们一般都会碰到两种情况,转成单一实体对象和转换成对象列表或者其他结构. 先来看第一种: 比如jso ...

  4. Android系统 (190)---Android:JSON 简介 amp; 解析方式 讲解(Gson、AS自带org.json、Jackson)

    Android:JSON 简介 & 解析方式 讲解(Gson.AS自带org.json.Jackson) 前言 现今最主流的数据交换格式 非 JSON莫属 今天,我将全面介绍 JSON &am ...

  5. Google Gson 使用简介

    原文:http://www.cnblogs.com/haippy/archive/2012/05/20/2509329.html 一.如何将数组转化为 json 串? 下面的例子中我们示例如何将一个数 ...

  6. Gson源码解析和它的设计模式

    前言 之前一段时间,准备把糗百的项目中json解析的模块中的原生Json解析换成gson解析,工作比较繁杂,坑多,因此为了防止出错,我还对Gson做了一个源码分析.这一篇就是Gson源码分析的总结,同 ...

  7. Gson与FastJson比较

    一. 简介和优劣 1.Google的Gson Gson是目前功能最全的Json解析神器,Gson当初是为因应Google公司内部需求而由Google自行研发而来,但自从在2008年五月公开发布第一版后 ...

  8. Java学习总结(二十)——JSON解析:官方解析,GSON解析,FastJSON解析,

    一.JSON简介: 1.JSON(javaScript Object Notation)是一种轻量级的数据交换格式: 2.JSON数据作为目前网络中主流的数据传输格式之一,应用十分广泛: 3.JSON ...

  9. Google Gson的使用方法及JSON 技术对比

    为什么80%的码农都做不了架构师?>>>    一 .各个JSON技术的简介和优劣 1.json-lib json-lib最开始的也是应用最广泛的json解析工具,json-lib ...

最新文章

  1. svn的代码提交到git服务器_svn服务器代码仓库,数据迁移到git仓库
  2. 学会用core dump调试程序错误(转)
  3. TCP/IP详解--学习笔记(7)-广播和多播,IGMP协议
  4. Apache Flink 零基础入门(二):使用docker快速搭建Flink
  5. 13 操作系统第三章 内存管理 虚拟内存 请求分页管理方式 页面置换算法 页面分配策略
  6. oSIP开发者手册 (四)
  7. idhttp.post方式 调用datasnap rest 远程方法(转咏南兄)
  8. 【Linux】解决用vi修改文件,保存文件时,提示“readonly option is set”
  9. linux 如何查看进程端口号,在linux中查看进程占用的端口号
  10. 保证速度与心情——pdg转pdf与djvu转pdf大法(不像网上的好多方法那样麻烦,方便快捷,纯傻瓜化操作!)
  11. 大规模集成电路数字计算机
  12. 腾讯QQ协议分析文档
  13. 2019JAVA面试题附答案,很实用
  14. 电影记忆之20(恐怖游轮)
  15. spring cloud 全家桶 简单介绍
  16. linux系统下修改hosts文件的权限
  17. 2020 年最佳流行 Python 库 Top 10
  18. 39.html5的动画(animation)
  19. 汶川大地震随感谢摘录
  20. RT-Thread:在dfs中使用cat、cp等命令时拔掉U盘死机问题

热门文章

  1. Linux系统入门学习:改变libvirt VM镜像的默认位置
  2. java 十六进制数的转换
  3. asp.net mvc4使用DropDownList
  4. 欢迎大家制作搜狗输入法flash皮肤。
  5. EIGRP分解试验部分-LAB1:EIGRP基本试验
  6. python 使用ElementTree解析xml
  7. 【重点】剑指offer——面试题36:数组中的逆序对
  8. 台大李宏毅Machine Learning 2017Fall学习笔记 (11)Convolutional Neural Network
  9. python 画图--简单开始及折线图
  10. 栈--进栈,出栈指针修改的顺序问题