java_5_json解析

2018-01-28  本文已影响70人  果芽软件

动口:

  1. 用JsonParser的parse方法把json字符串解析成JsonObject
  2. 通过JsonObject的get方法取属性
  3. JsonObject的属性有3种:叶子节点(如String)、json、array
  4. 如果属性值是String,就用getAsString方法取值
  5. 如果属性值是json,就用getAsJsonObject解析成Jsonobject
  6. 如果属性值是数组,就用getAsJsonArray解析成JsonArray
  7. 如果是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=男

上一篇 下一篇

猜你喜欢

热点阅读