动口:
- 用JsonParser的parse方法把json字符串解析成JsonObject
- 通过JsonObject的get方法取属性
- JsonObject的属性有3种:叶子节点(如String)、json、array
- 如果属性值是String,就用getAsString方法取值
- 如果属性值是json,就用getAsJsonObject解析成Jsonobject
- 如果属性值是数组,就用getAsJsonArray解析成JsonArray
- 如果是JsonArray用for循环逐个取值,如果是string、json、array,则。。。。
https://www.cnblogs.com/boy1025/p/4551593.html
依赖包
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.7</version>
</dependency>
接口规范
节点 | 父节点 | 约束 | 类型 | 长度 | 描述 |
---|---|---|---|---|---|
class | / | ||||
name | class | 1 | String | V20 | 班级名称 |
no | class | 1 | String | V10 | 班级编号 |
students | class | 1 | 学生列表 | ||
student | students | + | 学生 | ||
name | student | 1 | String | V20 | 学生姓名 |
sex | student | 1 | String | F1 | 性别 |
报文串
POST http://blog.csdn.net:80/yun90/article/GetRelatedArticles HTTP/1.1
Host: blog.csdn.net
Connection: keep-alive\r\n\r\n
{
"class": {
"name": "提高班",
"no": "1801",
"students": {
"student": [
{
"name": "宋海娇",
"sex": "女"
},
{
"name": "毛伟伟",
"sex": "男"
}
]
}
}
}
去掉换行、空格和引号转义之后的报文
POST http://blog.csdn.net:80/yun90/article/GetRelatedArticles HTTP/1.1\r\nHost: blog.csdn.net\r\nConnection: keep-alive\r\n\r\n{\"class\":{\"name\":\"提高班\",\"no\":\"1801\",\"students\":{\"student\":[{\"name\":\"宋海娇\",\"sex\":\"女\"},{\"name\":\"毛伟伟\",\"sex\":\"男\"}]}}}
解析代码
package com.basic;
import java.util.HashMap;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class Parse07 {
public static void main(String[] args) {
String request = "POST http://blog.csdn.net:80/yun90/article/GetRelatedArticles HTTP/1.1\r\nHost: blog.csdn.net\r\nConnection: keep-alive\r\n\r\n{\"class\":{\"name\":\"提高班\",\"no\":\"1801\",\"students\":{\"student\":[{\"name\":\"宋海娇\",\"sex\":\"女\"},{\"name\":\"毛伟伟\",\"sex\":\"男\"}]}}}";
int index = request.indexOf("\r\n\r\n");
String content = request.substring(index + 4);
System.out.println(content);
//解析器
JsonParser parser = new JsonParser();
//解析方法:入参=json串,出参JsonObject对象
//实现底层核心:HashMap,字段不固定,而且是键值对
JsonObject classObj = (JsonObject) parser.parse(content);
JsonObject obj=classObj.get("class").getAsJsonObject();
String cName=obj.get("name").getAsString();
String cNo=obj.get("no").getAsString();
System.out.println("cname="+cName);
System.out.println("cNo="+cNo);
JsonObject students=obj.getAsJsonObject("students");
//JsonArray底层核心就是一个数组
JsonArray studentArray=students.getAsJsonArray("student");
for(int i=0;i<studentArray.size();i++){
JsonObject student=studentArray.get(i).getAsJsonObject();
String sName=student.get("name").getAsString();
String sSex=student.get("sex").getAsString();
System.out.println("student_"+i+":name="+sName+",sex="+sSex);
}
HashMap<String,String> map1=new HashMap<String,String>();
map1.put("class", "{\"name\":\"提高班\",\"no\":\"1801\",\"students\":{\"student\":[{\"name\":\"宋海娇\",\"sex\":\"女\"},{\"name\":\"毛伟伟\",\"sex\":\"男\"}]}}");
String classStr=map1.get("class");
HashMap<String,String> map2=new HashMap<String,String>();
map2.put("name", "提高班");
map2.put("no", "1801");
map2.put("students", "{\"student\":[{\"name\":\"宋海娇\",\"sex\":\"女\"},{\"name\":\"毛伟伟\",\"sex\":\"男\"}]}");
HashMap<String,String> map3=new HashMap<String,String>();
map3.put("student", "[{\"name\":\"宋海娇\",\"sex\":\"女\"},{\"name\":\"毛伟伟\",\"sex\":\"男\"}]");
HashMap[] arry1=new HashMap[2];
HashMap m1=new HashMap();
m1.put("name", "宋海娇");
m1.put("sex", "女");
arry1[0]=m1;
HashMap m2=new HashMap();
m2.put("name", "毛伟伟");
m2.put("sex", "男");
arry1[1]=m2;
for(int i=0;i<arry1.length;i++){
HashMap map=arry1[i];
String name=(String) map.get("name");
String sex=(String)map.get("sex");
}
}
}
{"class":{"name":"提高班","no":"1801","students":{"student":[{"name":"宋海娇","sex":"女"},{"name":"毛伟伟","sex":"男"}]}}}
cname=提高班
cNo=1801
student_0:name=宋海娇,sex=女
student_1:name=毛伟伟,sex=男
网友评论