Json对象

 

整理

gson

==> json字符串

new Gson.toJson(对象引用);

==> java

对象

gson.fromJson(json引用, Student.class);

 

List

gson.fromJson(

json引用, new TypeToken<List<泛型>>(){}.getType());

Map

gson.fromJson(

json, new TypeToken<Map<String,泛型>>(){}.getType());

TypeToken是 gson 提供的数据类型转换器

节点解析

①获得解析器

JsonParser parser = new JsonParser();

②获得根节点元素

JsonElement element = parser.parse(json);

③根据文档判断根节点属于什么类型的 Gson 节点对象

// 假如文档 显示 根节点 为对象类型

// 获得 根节点 的实际 节点类型

JsonObject root = element.getAsJsonObject();

④取得节点下的某个节点的 value

// 获得 flag 节点的值, flag 节点为基本数据节点

JsonPrimitive flagJson = root.getAsJsonPrimitive("flag");

// 基本节点取值

boolean flag = flagJson.getAsBoolean();

// 获得 data 节点的值,data 节点为 Object 数据节点

JsonObject dataJson = root.getAsJsonObject("data");

// 将节点上的数据转换为对象

Student stu = new Gson().fromJson(dataJson,Student.class);

 

 

fastjson

1) 转为to json 字符串

String jsonString =

JSON.toJSONString(object);

2) 解析成parse对象

1). JavaBean :

Person person =

JSON.parseObject(jsonString, Person.class);

2). List:

List listString =

JSON.parseArray(jsonString, String.class);

3). List<Map>

List<Map> listMap =

JSON.parseObject(jsonString,newTypeReference<List<Map>>(){});

 

 

 

 

 

JSON

描述:

JSON 是一种轻量级易与解析的数据格式,它按照 js 的对象和数组的字面

量格式来书写。 现在 JSON 的光环已经逐渐超越了 XML,各大网站提供的数据

接口一般都是 JSON。

 

jquery 1.4 以后对 json 格式变严格了,也就是说必须要这种格式的

{"键":"值","键":"值 "};  必须用" "

 

像原来的{键:值,键:值}和{'键':'值','键':'值'}

这种都是错误的,不合标准,所以 jquery 返回 error

如"{\"success\":true,\"msg\":\"success\"}",如果说是boolean 类型,则不用加 引号,其它的键/值都需要加引号。

 

定义:

JSON:JavaScript 对象表示法(JavaScript Object Notation)

 

 一种轻量级的数据交换格式, 易于人阅读和编写, 也易于机器解析和生成。用来描述数据结构,它是基于纯文本的数据格式,是一种轻量级的数据交换格式。广泛应用于服务端与客户端的数据交互。

JSON 是存储和交换文本信息的语法,类似 XML。

JSON 采用完全独立于语言的文本格式,也使用了类似于 C 语言家族的习

惯(包括 C, C++, C#, Java, JavaScript, Perl, Python…)这些特性使 JSON 成为理想的数据交换语言。

JSON 是一个新的人类可读( human readable)的数据格式,在过去几年中已变得非常 受欢迎,尤其是在 web 开发中。

 

JSON 格式

 

1.对象:“名称/值”

对的集合(A collection of name/value pairs)

不同的语言中,它被理解为对象(object),记录(record),结构(struct),

字典 (dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组(associative array)。

 

2.数组

值的有序列表(An ordered list of values)

在大多数语言中,它被理解为数组(array)、矢量(vector), 列表(list)或者序列(sequence)。

 

具体形式

l Json 以 key-value 的形式存储数据

l Key 的取值 为 String 类型;

l Value 的取值 为 String,boolean,Number,数组,Object,null;

l Json 串              以 { 开始 以 } 结尾;

l Json 串中 数组是     以 [ 开始    以 ] 结尾;

l Json 串中 Object 以 { 开始   以 } 结尾;

 

1.对象是一个无序的“名称/值”对集合。一个对象以”{”开始,“}”结束。每

个名称后跟一个“:”;“名称/值 ”对之间使用“,”分隔。

 

2.数组是值的有序集合。一个数组以“[”开始,“]”结束。各值间使用“,”分隔。

 

3.值(value)可以是双引号括起来的字符串(string)、数值(number)、true、

false、null、 对象(object)或者数组(array)。这些结构可以嵌套。

 

 

4.字符串(string)是由 0 到多个 Unicode 字符组成的序列,封装在双引

号中, 可 以使用反斜杠’\’进行转义。一个字符可以表示为一个单一字符的字符chuan串.

 

5.数字(number)类似 C 或者 Java 里面的数,没有用到的 8 进制和 16 进

制数除外。

 

1. 使用 gson 解析处理

Gson是一个Google提供的一个Java库,可用于将Java对象转换为JSON表示。

它也可以被用来将 JSON 字符串转换成一个等效的 Java 对象。

提供易于使用的机制如 toString()和构造函数(工厂方法)将 Java 转换为 JSON,

反之亦然。允许自定义表示对象,支持任意复杂的对象,生成紧凑和可读性的

JSON 输出

 

1) 对象转为 Json 字符串

String json = new Gson().toJson(对象引用);★★★

 

I)、获得需要的对象:

Student stu = new Student();

stu.setName("张三");

stu.setAge(18);

 

II)、格式化为字符串

Gson gson = new Gson();

//将 对象 转化成 json 字符串

String json = gson.toJson(stu);

 

 

 

2) 解析成 java 对象

I)、Gson 的 节点对象:

 

JsonElement :

所有的节点 都是 JsonElement 对象.

 

JsonPrimitive :

基本的 数据类型的 节点 对象, JsonElement 的子类.

 

JsonNull :

代表 空节点 对象,即 有 key,value 为空,JsonElement 的子类.

 

JsonObject :

对象 数据类型的 节点 对象, JsonElement 的 子类.

 

JsonArray :

数组 数据类型的 节点 对象, JsonElement 的 子类.

 

II)、JsonElement 的取值:

JsonPrimitive : value 的取值对应 java 的

int,double,float,long,short,boolean,char,byte,

String,BigDecimal,BigInteger,Number

JsonObject : value 的取值对应 java 的 Object 对象.

JsonArray : value 的取值对应 java 的 List 及其子类对象.

III)、解析对象

★将 json 转化成 java 对象

{“name”:”张三”,”age”:18,”sex”:true}

Gson gson = new Gson();

类名 引用 = gson.fromJson(json引用, Student.class);

 

★将 json 转化 成 List 泛型

[

{"name":"a","age":18,"sex":true},

{"name":"b","age":19,"sex":false},

{"name":"c","age":20,"sex":true},

{"name":"d","age":21,"sex":false},

{"name":"e","age":22,"sex":true}

]

 

Gson gson = new Gson();

List<泛型> 泛型引用= gson.fromJson(

json引用, new TypeToken<List<泛型>>(){}.getType());

 

 

★将 json 转化成 Map 泛型

TypeToken是 gson 提供的数据类型转换器

Gson gson = new Gson();

Map<String,泛型> map = gson.fromJson(

json, newTypeToken<Map<String,泛型>>(){}.getType());

 

★★Json 节点解析

不用上面的办法也可以用节点解析

{

"flag": true,

"data": {

"name": "张三",

"age": 18,

"sex":

}

}

 

解析步骤 :

①获得解析器

JsonParser parser = new JsonParser();

②获得根节点元素

JsonElement element = parser.parse(json);

③根据文档判断根节点属于什么类型的 Gson 节点对象

// 假如文档 显示 根节点 为对象类型

// 获得 根节点 的实际 节点类型

JsonObject root = element.getAsJsonObject();

④取得节点下的某个节点的 value

// 获得 flag 节点的值, flag 节点为基本数据节点

JsonPrimitive flagJson = root.getAsJsonPrimitive("flag");

// 基本节点取值

boolean flag = flagJson.getAsBoolean();

// 获得 data 节点的值,data 节点为 Object 数据节点

JsonObject dataJson = root.getAsJsonObject("data");

// 将节点上的数据转换为对象

Student stu = new Gson().fromJson(dataJson,Student.class);

 

2. 使用 fastjson 处理

 

阿里巴巴 fastJson 是一个 Json 处理工具包,包括“序列化”和“反序列化”两

部分,它 具备如下特征:速度最快,测试表明,fastjson 具有极快的性能,超越其他的 Java Json parser。包括自称最快的 JackJson;功能强大,完全支持 Java Bean、集合、Map、日期、Enum,支持范型,支持自省;无依赖。

下载路径:

https://github.com/alibaba/fastjson/releases/tag/1.2.13

Fastjson 是一个 Java 语言编写的高性能功能完善的 JSON 库。fastjson 采用独创的算法,将 parse 的速度提升到极致,超过所有 json 库,包括曾经号称最快的 JackJson。并且还超越了 google 的二进制协议 protocol buf。Fastjson 完全支持 http://json.org 的标准, 也是官方网站收录的参考实现之一。支持各种JDK 类型。包括基本类型、JavaBean、 Collection、Map、Enum、泛型等。支持 JDK 5、JDK 6、Android、阿里云手机等环境。

 

1) 转为 json 字符串

String jsonString = JSON.toJSONString(object);

2) 解析成对象

1). JavaBean :

Person person = JSON.parseObject(jsonString, Person.class);

2). List:

List listString = JSON.parseArray(jsonString, String.class);

3). List<Map>

List<Map> listMap = JSON.parseObject(jsonString, new

TypeReference<List<Map>>(){});

Junit单元测试

1、在src目录下右键,选择"other"

2、在文本框搜索"test",选择"Junit Test Case"

3、在弹出的窗口设置包名和类名,点击"确定"

4、弹出窗口询问是否添加JUunit的相关类库,选择"是"

5、在单元测试中,单元测试方法上会有注解@Test,表示当前方式是测试用例

 

如何执行测试用例:

1、选择要测试的用例的方法名,右键选择"Run As"或"Debug As",选择"JUnit Test"

 

注:如果没有选择指定方法执行,会执行当前测试用例类中所有的测试方法

2、执行结果有两种:

暗红色:表示执行失败

绿色:表示执行成功

 

注意事项:

1、单元测试类不能有父类

2、单元测试方法不能是静态方法

3、单元测试方法没有参数

4、单元测试方法返回值是void

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值