JSON数据格式与Java操作JSON数据
1.JSON简介
JSON:JavaScript对象表示法(JavaScript Object Notation)。
JSON是储存和交换文本信息的语法。
- JSON是轻量级的文本数据交换格式
- JSON独立于语言和平台
- JSON具有自我描述性,更易理解
2.JSON与XML
类似XML,比XML更小、更快、更易解析。
- 没有结束标签
- 更短
- 读写的速度更快
- 使用数组
- 不使用保留字
3.JSON语法
JSON语法是JavaScript对象表示语法的子集。
- 数据在名称/值对中
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
JSON值可以是:
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true或false)
- 数组(在方括号中)
- 对象(在花括号中)
- null
4.GSON官方GitHub
5.java读取JSON数据
5.1.第一步要先创建一个JsonParser
JsonParser parser = new JsonParser();
5.2.观察json格式,由外向内解析,例如解析如下json文本
{
"class": "101",
"student": [
{
"name": "张三",
"sex": 1
},
{
"name": "李四",
"sex": 1
},
{
"name": "王五",
"sex": 0
}
],
"Good": true
}
最外层为花括号{ },解析花括号{ },要定义一个JsonObject接收解析结果:
JsonParser parser = new JsonParser();
String str = "{\"class\":\"101\",\"student\":[{\"name\":\"张三\",\"sex\":1},{\"name\":\"李四\",\"sex\":1},{\"name\":\"王五\",\"sex\":0}],\"Good\":true}";
JsonObject object = (JsonObject) parser.parse(str);
这里要注意:如果解析一段json字符串,存放变量时不要忘记转义符号,一般在IDE内粘贴自带转义。
5.3.获取"class"值和"Good"值
JsonParser parser = new JsonParser();
String str = "{\"class\":\"101\",\"student\":[{\"name\":\"张三\",\"sex\":1},{\"name\":\"李四\",\"sex\":1},{\"name\":\"王五\",\"sex\":0}],\"Good\":true}";
JsonObject object = (JsonObject) parser.parse(str);
String classname = object.get("class").getAsString();
boolean good = object.get("NB").getAsBoolean();
先从JsonObject对象中使用get(String s)方法获得json中名为s的值,然后根据值的类型,再使用getAs类型名()方法获得值。
5.4.获取"student"值
通过观察发现,student的值为数组[ ],解析方括号[ ],要定义一个JsonArray接收解析结果:
JsonParser parser = new JsonParser();
String str = "{\"class\":\"101\",\"student\":[{\"name\":\"张三\",\"sex\":1},{\"name\":\"李四\",\"sex\":1},{\"name\":\"王五\",\"sex\":0}],\"Good\":true}";
JsonObject object = (JsonObject) parser.parse(str);
String classname = object.get("class").getAsString();
boolean good = object.get("NB").getAsBoolean();
JsonArray array = object.get("student").getAsJsonArray();
先从JsonObject对象中使用get(“student”)方法获得json中名为student的值,然后因为是json数组,所以使用getAsJsonArray()方法获得值,取到的是一个JsonObject的数组,我们还需要遍历数组去解析
JsonParser parser = new JsonParser();
String str = "{\"class\":\"101\",\"student\":[{\"name\":\"张三\",\"sex\":1},{\"name\":\"李四\",\"sex\":1},{\"name\":\"王五\",\"sex\":0}],\"Good\":true}";
JsonObject object = (JsonObject) parser.parse(str);
String classname = object.get("class").getAsString();
boolean good = object.get("NB").getAsBoolean();
JsonArray array = object.get("student").getAsJsonArray();
for (int i = 0; i < array.size(); i++) {
JsonObject student = array.get(i).getAsJsonObject();
String name = student.get("name").getAsString();
int sex = student.get("sex").getAsInt();
System.out.println(name+"\t"+sex);
}
6.java创建JSON数据
如果想要创建一个这样的json文本:
{
"class": "101",
"student": [
{
"name": "张三",
"sex": 1
},
{
"name": "李四",
"sex": 1
},
{
"name": "王五",
"sex": 0
}
],
"Good": true
}
通过解析的原理,我们可以这样创建
JsonObject object = new JsonObject();
object.addProperty("class", "101");// 添加class元素
JsonArray array = new JsonArray();//新建JsonArray数组
JsonObject student1 = new JsonObject();
student1.addProperty("name", "张三");
student1.addProperty("sex", 1);
array.add(student1);//将JsonObject添加到JsonArray中
JsonObject student2 = new JsonObject();
student2.addProperty("name", "李四");
student2.addProperty("sex", 1);
array.add(student2);
JsonObject student3 = new JsonObject();
student3.addProperty("name", "王五");
student3.addProperty("sex", 0);
array.add(student3);
object.add("student", array);//添加student元素
object.addProperty("Good", true);// 添加Good元素
System.out.println(object);