Java中JSON的解析

893 阅读2分钟

1、JSON官方

使用官方json包解析时,需要下载json官方jar包,并导入

下载地址(maven仓库):mvnrepository.com/artifact/or…

  • 待解析的字符串是简单对象类型,被大括号 { }包围时
        //待解析的json字符串
        String jsonString = "{'name':'阿雄','age':24,'Position':'Mid'}";

        //因为json字符串是大括号包围,所以用JSONObject解析
        JSONObject json = new JSONObject(jsonString);
        String name = json.getString("name");
        int age = json.getInt("age");
        String position = json.getString("Position");
  • 待解析的字符串是数组类型,被中括号 [ ] 包围时:

        //待解析的json字符串
        String jsonString = "['阿雄','white','阿伟','阿六']";
    
        //因为json字符串是大括号包围,所以用JSONArray解析
        JSONArray jsonArray = new JSONArray(jsonString);
    
        //遍历即可,foreach或for循环
        for (Object name : jsonArray) {
            System.out.println(name);
        }
    
  • 待解析的字符串既有中括号 [ ]、又有大括号[ ] 包围时,逐层解析:

        //待解析的json字符串
        String jsonString = "{'name':'卢本伟','age':24,'Hero':{'name':'Fizz','Position':'Mid','charactor':'killer'},'nickNames':['五五开','芦苇','white'],'Honors':[{'year':2011,'name':'TGA总决赛冠军'},{'year':2013,'name':'S3全球总决赛中国区冠军'},{'year':2013,'name':'S3全球总决赛亚军'}]}";
    
        try {
        //因为json字符串是大括号包围,所以用JSONObject解析
        JSONObject json = new JSONObject(jsonString);
    
        /*
         * 普通元素,根据类型直接获取
         */
        String name = json.getString("name");
        int age = json.getInt("age");
        System.out.println("姓名:"+name);
        System.out.println("年龄:"+age);
        System.out.println("————————————————————————————————");
    
        /*
         * 属性大括号包括,先获取JSONObject对象
         */
        JSONObject hero = json.getJSONObject("Hero");
        String hero_name = hero.getString("name");
        String hero_position = hero.getString("Position");
        String hero_charactor = hero.getString("charactor");
        System.out.println("擅长英雄:");
        System.out.println("英雄名:"+hero_name);
        System.out.println("位置:"+hero_position);
        System.out.println("英雄定位:"+hero_charactor);
        System.out.println("————————————————————————————————");
    
        /*
         * 属性被中括号包括,获取JSONArray对象,遍历即可
         */
        System.out.println("外号:");
        JSONArray nickNames = json.getJSONArray("nickNames");
        for (Object nickName : nickNames) {
            System.out.println(nickName);
        }
        System.out.println("————————————————————————————————");
    
        /*
         * 属性中既有中括号包括,又嵌套了大括号,一层层获取即可
         */
        JSONArray Honors = json.getJSONArray("Honors");
        System.out.println("所获荣誉:");
        for(int i=0;i<Honors.length();i++) 
        {
            JSONObject honor = Honors.getJSONObject(i);
            int honor_year = honor.getInt("year");
            String honor_name = honor.getString("name");
            System.out.println(honor_year+" : "+ honor_name);
        }
        }catch(Exception e) 
        {
            System.out.println(e.getMessage());
        }        
    

2.fastjson解析

fastjson是阿里巴巴开源产品之一,解析速度快

下载地址(maven仓库):mvnrepository.com/artifact/co…

  • 将对象转换为JSON字符串

转换JSON字符串的步骤: 

 1. 引入JAR包 

 2. 在需要转换JSON字符串的位置编写如下代码即可: 

   String json=JSON.toJSONString(要转换的对象); 

 案例:

   Book b = BookDao.find(); 

   String json=JSON.toJSONString(b); 

   System.out.println(json);

  • 将JSON字符串转换为对象

   1. 引入JAR包 

   2. 在需要转换Java对象的位置, 编写如下代码: 

   类型 对象名=JSON.parseObject(JSON字符串, 类型.class); 

 或 

   List<类型> list=JSON.parseArray(JSON字符串,类型.class);

 案例:

   String json = "{"id":1,"name":"金苹果","author":"李伟杰 ","info":"嘿嘿嘿嘿嘿     嘿","price":198.0}"; 

   Book book = JSON.parseObject(json, Book.class); 

   System.out.println(book);

3.GSON解析

GSON解析是谷歌的,也比较好用

下载地址(maven仓库):repo1.maven.org/maven2/com/…

  • 将对象转换为JSON字符串

转换JSON字符串的步骤: 

   1. 引入JAR包 

   2. 在需要转换JSON字符串的位置编写如下代码即可: 

   String json = new Gson().toJSON(要转换的对象); 

 案例: 

   Book b = BookDao.find(); 

   String json = new Gson().toJson(b); 

   System.out.println(json);  

  • 将JSON字符串转换为对象:

   1. 引入JAR包 

   2. 在需要转换Java对象的位置, 编写如下代码: 

   对象 = new Gson().fromJson(JSON字符串,对象类型.class); 

案例: 

  String json = "{"id":1,"name":"金苹果","author":"李伟杰 ","info":"嘿嘿嘿嘿嘿    嘿","price":198.0}"; 

  Book book = new Gson().fromJson(json, Book.class); 

  System.out.println(book);