美文网首页
java_5_json解析

java_5_json解析

作者: 果芽软件 | 来源:发表于2018-01-28 10:23 被阅读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=男

    相关文章

      网友评论

          本文标题:java_5_json解析

          本文链接:https://www.haomeiwen.com/subject/ezjaaxtx.html