Java与Json的转换.解析
1.Json简概
1.1Json的出现
RPC远程调用(RPC是远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议)时或者提供给外部访问接口,必须有一个两边认可的统一的数据交互格式,需求的硬性要求有了json的出现
1.2什么是Json
(1).JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
(2).JSON 是轻量级的文本数据交换格式
(3).JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。
(4).JSON 具有自我描述性,更易理解
通俗理解Json:
一种数据传输时的文本格式,=>一串字符串,只不过元素会有特殊符号标注而已
1.3创建对象的不同形式
一本书
书名
简介
java:
class Book{
private String name;
private String info;
get/set...
}
Book b = new Book();
b.setName(“数据结构”);
b.setInfo(“算法+程序”); ...
js:
var b = new Object();
b.name = "数据结构";
b.info = "算法+程序";
XML:
<book>
<name>数据结构</name>
<info>算法+程序</info>
</book>
Json:
{
"name":"数据结构",
"info":"算法+程序"
}
一个对象, 由一个大括号表示.{}
括号中 描述对象的属性 . 通过键值对来描述对象的属性 (可以理解为, 大括号中, 包含的是一个个的键值对.)
格式:
键与值之间使用冒号连接, 多个键值对之间使用逗号分隔.
键值对的键 应使用引号引住 (通常Java解析时, 键不使用引号会报错. 而JS能正确解 析.)
键值对的值, 可以是JS中的任意类型的数据
1.3.1数组格式
[元素1,元素2...] //可以互相嵌套
2.Gson(谷歌)
2.1将对象转换为JSON字符串
Gson.toJson(object);
//1. 创建Gon对象
Gson g = new Gson();
//2. 转换
Book b = new Book("100","数据结构","算法+程序");
String s = g.toJson(b);
System.out.println(s);
//*******************************
//Gson创建对象只使用一次,用匿名来调用
Book b = new Book("100","数据结构","算法+程序");
String s = new Gson().toJson(b);
System.out.println(s);
运行结果:
{“id”:“100”,“name”:“数据结构”,“info”:“算法+程序”}
2.2将JSON字符串转换为对象
Gson.fromJson(String,object.class);
//1. 创建Gson对象
Gson g = new Gson();
//2. 转换 : {"id":"100","name":"数据结构","info":"算法+程序"}
Book b = g.fromJson("{\"id\":\"100\",\"name\":\"数据结构\",\"info\":\"算法+程序\"}", Book.class);
System.out.println(b.getId()+" "+b.getName()+" "+b.getInfo());
String:要转换的Json格式字符串
class:要转换成哪种类
运行结果:
100 数据结构 算法+程序
2.2.1Json里嵌套数组(List)
//1. 创建Gson对象
Gson g = new Gson();
//2. 转换 : {"id":"100","name":"数据结构","info":"程序+算法","page":["昨天已过","今天仍在","明天到来"]}
HashMap data = g.fromJson("{\"id\":\"100\",\"name\":\"数据结构\",\"info\":\"程序+算法\",\"page\":[\"昨天已过\",\"今天仍在\",\"明天到来\"]}", HashMap.class);
List page = (List) data.get("page");
System.out.println(page.get(1));
运行结果:
昨天已过
今天仍在
明天到来
3.FastJson(阿里)
3.1将对象转换为JSON字符串
JSON.toJSONString(object);
Book book = new Book("1002","数据结构","数据结构主要是线性结构和非线性结构");
//1. 转换
String json = JSON.toJSONString(book);
System.out.println(json);
运行结构:
{“id”:“1002”,“info”:“数据结构主要是线性结构和非线性结构”,“name”:“数据结构”}
3.2将JSON字符串转换为对象
JSON.parseObject(String,Object.class);
//1. 转换 : {"id":"1002","info":"数据结构主要是线性结构和非线性结构","name":"数据结构"}
Book book = JSON.parseObject("{\"id\":\"1002\",\"info\":\"数据结构主要是线性结构和非线性结构\",\"name\":\"数据结构\"}", Book.class);
System.out.println(book.getId()+" "+ book.getName()+" "+ book.getInfo());
String:要转换的Json格式字符串
class:要转换成哪种类
1002 数据结构 数据结构主要是线性结构和非线性结构
3.2.1Json里嵌套数组(List)
//1. 转换 : ["昨天已过","今天仍在","奔赴明天"]
List<String> strings = JSON.parseArray("[\"昨天已过\",\"今天仍在\",\"奔赴明天\"]", String.class);
System.out.println(strings.get(1));
运行结果:
今天仍在