文章目录
JSON作用
json的存在有两种形式,这两种形式可以互转
- 对象的形式存在,我们叫它json对象。
当JSON是对象,我们可以把它转换为字符串,方便我们在多种语言中来回交互传递 - 字符串的形式存在,我们叫它json字符串。
当JSON是字符串,这种字符串可以被各种语言识别,我们可以在一种语言中,把对象(对象必须不含函数)转换成字符串,然后在另一种语言中使用JSON把字符串转换为对象,从而实现数据交互。
数据交互指的是客户端和服务器之间业务数据的传递格式
JSON在JavaScript中的作用
作用:
把JS中的数据转换为其他语言可理解的数据,向外传递数据,或者接受外来数据,并转换为JS可理解的语言
JSON的定义
json是由键值对组成,并且由花括号(大括号)包围。每个键由引号引起来,键和值之间使用冒号进行分隔,
多组键值对之间进行逗号进行分隔。
JSON的访问
json本身是一个对象。json中的key我们可以理解为是对象中的一个属性。json中的key访问就跟访问对象的属性一样: json对象.key
把对象转换为字符串之stringify
- 首先,我们在JS中创建一个对象:
var obj={"name":"牛蛙","age":18,"Gender":"小青年"};
注意,我们这里创建的对象,属性名也必须加上双引号 - 调用JSON的
stringify(对象名)
方法,即可把对象转换为字符串
把字符串转换为对象之parse
- 字符串可以是我们自己定义的,但自己定义的字符串必须符合创建对象时候的规格。
如:'var obj={"name":"牛蛙","age":18,"Gender":"小青年"}';
注意要单引号
字符串也可以为我们用JSON将对象转换成的字符串 - 然后调用JSON的
parse()
方法
eval()
在js中eval()可以将一段字符串转换为代码进行执行
如:
所以也可以利用eval()这个特性,把字符串转换为对象
利用eval将字符串转换为对象
当这样用的时候,记得在字符串两边加上括号
JSON在Java中的作用
一般就是数据转换,然后传递到外部或者接受外部传来的数据并处理,所以可以说,JSON就是用于数据交互传递的
- JavaBean和JSON的互转
- List和JSON的互转
- Map和JSON的互转
Java使用JSON前的准备工作
- 需要导入
gson
的jar包 - 如果要用Test注解,则需要导入两个jar包
JavaBean和JSON的互转
- JavaBean转换为JSON
一般用于将Java中的数据转换为JSON好方便向外传输
person是随便创建的JavaBean类 - JSON转JavaBean
一般用于接收的外部数据上面,将外部数据转换为JavaBean
List和JSON的互转
- List转JSON
- JSON转LIst
这个特殊一点,因为直接转的话,转过来的List其中的存储的数据类型会发生变化,在取出其中数据的时候,会发生数据类型转换错误,所以我们需要在JSON对象的fromJson方法的第二个参数上做一点手脚
第一步:我们需要创建一个类,类名随便,这个类我们需要继承一个东西
如下:
在我们导入的JSON的jar包中有这样一个反射:
就是这个,我们创建的这个类就需要继承这个东西
然后如图:
这个就是我随便创建的类,注意要继承TypeToken
,然后后面写一个泛型,泛型类型就是我们JSON需要转换成的List类型
这样,这个类就完成了
然后在我们Json转List这里:传入的第二个参数这样写
即创建的类的实例.getType()
,即可
然后就转换成功了,List里面的数据也可转换为我们一开始向List中传入的数据类型了==
Map和Json的互转
- Map转Json
一样的配方,一样的操作 - Json转Map
和Json转List一样,需要写一个类,创建这个类的实例,引用这个实例的getType()
方法作为fromJson的第二个参数
创建的类如下:
转换!
用匿名类实现Json向List和Map的转换
直接创建类来用于Json向集合转换势必会造成我们在实际开发中的资源浪费,所以我们可以直接使用匿名内部类来代替直接创建的类
如图:
只红线部分更改
即在fromJson的第二个参数里传入new TypeToken<T>(){}.getType()
即可,这里面的T表示一个泛型的类型,在实际操作中,把T换成我们Json需要转换成的集合类型即可