JSON
JSON(JavaScript Object Notation):JS对象简谱,它是一种轻量级的数据交换格式(占内存空间少)。是存储和交换文本信息的语法(注意不是一种编程语言)类似于XML,采用键值对的方式来保存数据。易于人与机器观察和使用数据。
语法格式:
假设要设置一本书,此对象有书名,和简介两个属性。
举栗子:
{
"name":"独孤九剑",
"info":"苦心智,劳筋骨,饿体肤,方可练成"
}在JSON中,一个对象就由一个大括号表示,并且括号中描述的是对象的属性,通过键值对来描述对象的属性的值。
在“独孤九剑”例子中,name就是键,其对应的值就是独孤九剑,然后键值之间用冒号连接,并且多个键值之间使用逗号来分隔。
注意:键值对的键要用引号来引住,因为通常在Java解析中,如果键不使用引号会报错的,但在JS却不会。
键值对的值可以是JS中任意类型的数据。
数组在JSON中的格式:
可以与对象相互嵌套:[元素1,元素2,....]
举栗子:
以一个人的人际关系举例
人名:张三,年龄:19,朋友圈:李四,王二,麻子,灭绝师太。然后灭绝师太对象里有别人对她的评价:人很话不多。
{
"name":"张三",
"age":19,
"friends":["李四","王二","麻子",{
"name":灭绝师太,
"info":"人狠话不多"
}],
"heihei":{
"name":"大长刀",
"length":"40m"
}
}(注意嵌套含义)
将对象转化为JSON字符串
先创建Person对象举个栗子:
public class Person {
private String id;//人送外号
private String name;//真实名字
private String info;//别人评价
get....
set...
toString...
}
以Gson为例(google/gson)
public static void main(String[] args) {
//1、创建Gson对象
Gson g = new Gson();
//2、转换
Person p = new Person("灭绝师太","尼姑","人狠话不多");
String s = g.toJson(p);
System.out.println(s);
/*匿名
Person p = new Person("灭绝师太","尼姑","人狠话不多");
String s = new Gson().toJson(p);
System.out.println(s);
*/
}结果:
{"id":"灭绝师太","name":"尼姑","info":"人狠话不多"}将JSON字符串转化为对象
对象 = new Gson().fromJson(JSON字符串,对象类型.class);
public static void main(String[] args) {
//1、创建Gson对象
Gson g = new Gson();
//2、转换
Person p = g.fromJson("{\"id\":\"灭绝师太\",\"name\":\"尼姑\",\"info\":\"人狠话不多\"}",Person.class);
System.out.println(p.getId());
System.out.println(p.getName());
System.out.println(p.getInfo());
/*
也可以以匿名方式,这里就懒得打了
*/
}结果:
灭绝师太
尼姑
人狠话不多还有数组,比如
public static void main(String[] args) {
//1、创建Gson对象
Gson g = new Gson();
//2、转换 {"id":"灭绝师太","name":"尼姑","info":"人狠话不多","friends":["张三","麻子","嘿嘿"]} 加入了朋友圈这一数组
HashMap data = g.fromJson("{\"id\":\"灭绝师太\",\"name\":\"尼姑\",\"info\":\"人狠话不多\",\"friends\":[\"张三\",\"麻子\",\"嘿嘿\"]}",HashMap.class);
System.out.println(data.get("friends"));//当你输出data.get("friends").getClass时friends类型是ArrayList 注意!!!
List friends = (List)data.get("friends");
System.out.println(friends.get(0));
}结果:
[张三, 麻子, 嘿嘿]
张三哦,还有FastJSON(阿里巴巴提供的)
首先是对象转化为JSON:
public static void main(String[] args) {
Person p = new Person("灭绝师太","尼姑","人狠话不多");
//1、转换
String json = JSON.toJSONString(p);
System.out.println(json);
}结果:
{"id":"灭绝师太","info":"人狠话不多","name":"尼姑"}然后是JSON转化为对象
public static void main(String[] args) {
//1、转换 {"id":"灭绝师太","info":"人狠话不多","name":"尼姑"}
Peson p = JSON.parseObject("{\"id\":\"灭绝师太\",\"info\":\"人狠话不多\",\"name\":\"尼姑\"}",Person.class);
System.out.println(book.getId());
//{"一二三","二三四","三四五"} 随便举个数组的例子
List<String> strings = JSON.parseArray("[\"一二三\",\"二三四\",\"三四五\"]",String.class);
System.out.println(strings.get(1));
}这里注意,不像GSON,这里数组有单独的方法转化。不过总体来说无论是GSON还是FastJSON他们的方法都很见名知意,很好理解。
---------------------------------------------------------------------------------
作者:PuPile
















