Java解析JSON数据

Java解析JSON数据

1、什么是JSON?

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。

它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。

简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。

易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

2、JSON的语法格式

JSON 语法衍生于 JavaScript 对象标记法语法:

  • 数据在键值对中。比如:{“name”:“Bill Gates”} 在 JSON 中,值必须是以下数据类型之一:
    • 字符串(在 JSON 中,字符串值必须由双引号编写)
    • 数字
    • 对象
    • 数组
    • 布尔
    • null
  • 数据由逗号分隔
  • 花括号容纳对象
  • 方括号容纳数组
  • 注释符号为 #

一个天气查询API网站返回的JSON实例,网址:

http://www.tianqiapi.com/index/doc?version=v61

{
       "cityid":"101271201", #城市编号
       "date":"2020-07-15",
       "week":"星期三",
       "update_time":"10:15", #更新时间
       "city":"内江", #城市名称
       "cityEn":"neijiang",
       "country":"中国",
       "countryEn":"China",
       "wea":"阴", #实时天气情况
       "wea_img":"yin",
       "tem":"25", #实时温度
       "tem1":"29", #高温
       "tem2":"23", #低温
       "win":"西风", #风向
       "win_speed":"2级", #风力等级
       "win_meter":"小于12km/h", #风速
       "humidity":"97%", #湿度
       "visibility":"24.22km", #能见度
       "pressure":"961", #气压
       "air":"15", #空气质量
       "air_pm25":"8", #pm2.5
       "air_level":"优",
       "air_tips":"空气很好,可以外出活动,呼吸新鲜空气,拥抱大自然!",
       "alarm":{
           "alarm_type":"暴雨",  #预警类型
           "alarm_level":"橙色", #预警等级
           "alarm_content":"内江市气象台715523分发布第16号暴雨橙色预警信号:
      预计我市市中区部分地方3小时降雨量将达50毫米以上,并伴有雷电和阵性大风,请加强防范强降水、雷电和大风等带来的危害。
   (预警信息来源:国家预警信息发布中心)" #预警描述
       },
       "aqi":{ #空气质量指数详情
           "air":"15",
           "air_level":"优",
           "air_tips":"空气很好,可以外出活动,呼吸新鲜空气,拥抱大自然!",
           "pm25":"8",
           "pm25_desc":"优",
           "pm10":"10",
           "pm10_desc":"优",
           "o3":"47",
           "o3_desc":"优",
           "no2":"12",
           "no2_desc":"优",
           "so2":"8",
           "so2_desc":"优",
           "co": "1",
           "co_desc": "优",
           "kouzhao":"无需戴口罩",
           "waichu":"适宜外出",
           "yundong":"适宜运动",
           "kaichuang":"适宜开窗",
           "jinghuaqi":"关闭净化器",
           "cityid":"101271201",
           "city":"内江",
           "cityEn":"neijiang",
           "country":"中国",
           "countryEn":"China"
       }
   }

3、JSON的用途

对于客户端而言,可以通过JSON,将大量数据一次性传送到服务器,对于服务器 而言,可以在单个请求中处理大量的数据。

目前Java较为流行的JSON解析库有谷歌的GSON,阿里的FastJson等。

Gson Jar包下载地址:https://search.maven.org/artifact/com.google.code.gson/gson/2.8.7/jar

FastJson Jar包下载地址:
https://github.com/alibaba/fastjson

4、Java中解析JSON数据

  import com.google.gson.Gson;
  
  import java.util.*;
  
  public class GsonAndFastJsonUse {
      public static void main(String[] args) {
          Person p = new Person();
          p.setName("张三");    //String类型
          p.setAge(18);   //int类型
          List<String> hobby = new ArrayList<>();
          hobby.add("健身");
          hobby.add("游泳");
          hobby.add("编程");
          hobby.add("唱歌");
          hobby.add("弹吉他");
          p.setHobby(hobby);  //List类型
          Map<String,String> idCardInfo = new LinkedHashMap<>();
          idCardInfo.put("id","10000");
          idCardInfo.put("name","张三");
          idCardInfo.put("age","18");
          idCardInfo.put("address","China");
          p.setIdCardInfo(idCardInfo);    //Map类型
          Book book = new Book("月亮与六便士","描述了一个原本平凡的伦敦证券经纪人思特里克兰德,突然着了艺术的魔,抛妻弃子,绝弃了旁人看来优裕美满的生活,奔赴南太平洋的塔希提岛,用圆笔谱写出自己光辉灿烂的生命,把生命的价值全部注入绚烂的画布的故事。");
          p.setBook(book);    //book对象类型
          //1.1、将对象转换成JSON字符串
          String GsonStr = new Gson().toJson(p);
          System.out.println(GsonStr);
          //1.2、把字符串转成对象
          Person person = new Gson().fromJson(GsonStr, Person.class);
          System.out.println(person.getAge());
          System.out.println(person.getBook());
          System.out.println(person.getName());
          System.out.println(person.getHobby());
          System.out.println(person.getIdCardInfo());
          //1.3   将字符串形式的JSON数组,转成List对象
          ArrayList<String> listStr = new Gson().fromJson("[\"一二三四五\",\"上山打老虎\",\"床前明月光\",\"疑是地上霜\"]", ArrayList.class);
          for (String str : listStr) {
              System.out.println(str);
          }
          //2.1   把对象转成JSON字符串
          String fastJsonStr = JSON.toJSONString(p);
          System.out.println(fastJsonStr);
          //2.2   把JSON字符串转成对象
          Person person1 = JSON.parseObject(fastJsonStr,Person.class);
          System.out.println(person.getAge());
          System.out.println(person.getBook());
          System.out.println(person.getName());
          System.out.println(person.getHobby());
          System.out.println(person.getIdCardInfo());
          //2.3   把字符串形式的JSON数组转成List对象
          List<String> strs = JSON.parseArray("[\"一二三四五\",\"上山打老虎\",\"床前明月光\",\"疑是地上霜\"]", String.class);
          for (String str : strs) {
              System.out.println(str);
          }
  
  
      }
  }
  class Person {
      private String name;
      private int age;
      private List<String> hobby;
      private Map<String,String> idCardInfo;
      private Book book;
      
  	······
  }
  class Book {
      private String name;
      private String info;
      
  	······
  }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值