整理
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