• 带你了解“JSON解析”


    前言

            JSON是一种轻量级的数据交换格式。采用完全独立于编程语言的文本格式来存储和表示数据。层次结构简洁明了,易于阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

    语法

            json的每个数据都是由键值对(key:value)组成的;

            每组数据之间使用","来分隔;

            如果存在特殊字符需使用"\"进行转义;

            使用大括号{ }来保存对象,每个对象由若干数据组成;

            {"key1":value1,"key2":value2,"key3":value3,...,"keyn":valuen}

            使用中括号[ ]保存数组(集合),数组(集合)中可以包含若干个对象

    [{"key1":value1,"key2":value2,"key3":value3,...,"keyn":valuen},{"key1":value1,"key2":value2,"key3":value3,...,"keyn":valuen},{"key1":value1,"key2":value2,"key3":value3,...,"keyn":valuen}]

        data  :  [

                       {"key1":value1,"key2":value2,"key3":value3,...,"keyn":valuen},                                     {"key1":value1,"key2":value2,"key3":value3,...,"keyn":valuen},                                     {"key1":value1,"key2":value2,"key3":value3,...,"keyn":valuen}  

                    ]  

    }

     JSON---用途

            在计算机之间进行数据传递

     JSON---特点

            JSON只允许使用UTF-8编码,不存在编码问题;

            JSON内容仅包含(key:value)键值对,格式简单,不存在冗余结构,是一种轻量级的数据交换格式;

            浏览器内置JSON支持,将数据用JSON发送至浏览器,可以之间使用JavaScript处理;因此,在开发互联网应用时,由于JSON简单便捷的特点,绝大多数RESTAPI都使用JSON作为数据传输格式;

    Java解析JSON

            在Java开发应用程序过程中,往往面临Java对象与JSON数据格式之间的互相转换,因此我们需要掌握如何使用第三方库来进行JSON解析;

    常用解析JSON的第三方库:

            Jackson、Gson、Fastjson

    使用Fastjson解析JSON

     什么是fastjson?

             fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。

    Fastjson的优点

            速度快、使用广泛、测试完备、使用简单、功能完备

      Fastjson主要对象

    fastjson主要使用JSON、JSONObject、JSONArray三个类。其中JSONObject与JSONArray继承自JSON

     JSON类

            JSON类的主要作用是用于原始转换

    常用方法:

    序列化:将Java格式转换为Json格式的数据

    反序列化:将Json格式的字符串转换成Java对象

    1. public class Demo {
    2. public static void main(String[] args) {
    3. PoliceStation ps1=new PoliceStation();
    4. ps1.setName("周县派出所");
    5. ps1.setAddr("周县456号");
    6. ps1.setTel("151234555237");
    7. //序列化:将Java格式转换为Json格式的数据
    8. String json1=JSON.toJSONString(ps1);
    9. System.out.println(json1);
    10. //反序列化:将Json格式的字符串转换成Java对象
    11. String jsonStr="{\"addr\":\"周县456号\",\"name\":\"周县派出所\",\"tel\":\"151234555237\"}";
    12. PoliceStation ps2=JSON.parseObject(jsonStr,PoliceStation.class);
    13. System.out.println(ps2);
    14. }
    15. }

    JSONObject类

            JSONObject类主要用于封装key-value键值对数据,继承自LinkedHashMap接口

    常用方法:

    将JSON格式数据转化成指定自定义实例对象

    JSON.parseObject(String text,Class clazz)

    1. public class Demo{
    2. public static void main(String[] args) {
    3. String jsonStr="{\r\n" +
    4. " \"temperature\": \"24℃~39℃\",\r\n" +
    5. " \"weather\": \"小雨\",\r\n" +
    6. " \"weather_id\": {\r\n" +
    7. " \"fa\": \"07\",\r\n" +
    8. " \"fb\": \"07\"\r\n" +
    9. " },\r\n" +
    10. " \"wind\": \"东北风3-5级\",\r\n" +
    11. " \"week\": \"星期一\",\r\n" +
    12. " \"city\": \"西安\",\r\n" +
    13. " \"date_y\": \"2022年07月11日\",\r\n" +
    14. " \"dressing_index\": \"炎热\",\r\n" +
    15. " \"dressing_advice\": \"天气炎热,建议着短衫、短裙、短裤、薄型T恤衫等清凉夏季服装。\",\r\n" +
    16. " \"uv_index\": \"弱\",\r\n" +
    17. " \"comfort_index\": \"\",\r\n" +
    18. " \"wash_index\": \"不宜\",\r\n" +
    19. " \"travel_index\": \"较不宜\",\r\n" +
    20. " \"exercise_index\": \"较不宜\",\r\n" +
    21. " \"drying_index\": \"\"\r\n" +
    22. "}";
    23. //JSONObject继承自LinkedHashMap
    24. JSONObject weatherJsonobj=JSON.parseObject(jsonStr);
    25. System.out.println(weatherJsonobj);
    26. //根据key获取对应的value
    27. String city=weatherJsonobj.getString("city");
    28. System.out.println("城市:"+city);
    29. String wind=weatherJsonobj.getString("wind");
    30. System.out.println("风力:"+wind);
    31. String temperature=weatherJsonobj.getString("temperature");
    32. System.out.println("温度:"+temperature);
    33. String weather=weatherJsonobj.getString("weather");
    34. System.out.println("天气:"+weather);
    35. }
    36. }

    JSONArray类

            JSONArray类主要用于封装数组集合类的数据,它继承自ArrayList

    常用方法

    将JSON格式的数据转换成指定的泛型集合

    JSON.parseObject(String Text, Class clazz)

    1. public class Demo{
    2. public static void main(String[] args) {
    3. String s="{\r\n" +
    4. " \"title\": \"上海市政派出所信息\",\r\n" +
    5. " \"list\": [{\r\n" +
    6. " \"name\": \"文保分局沪东高校派出所\",\r\n" +
    7. " \"addr\": \"中山北一路801号\",\r\n" +
    8. " \"tel\": \"22027732\"\r\n" +
    9. " }, {\r\n" +
    10. " \"name\": \"文保分局沪西高校派出所\",\r\n" +
    11. " \"addr\": \"芙蓉江路55号\",\r\n" +
    12. " \"tel\": \"62751704\"\r\n" +
    13. " }, {\r\n" +
    14. " \"name\": \"水上公安局吴淞水上派出所\",\r\n" +
    15. " \"addr\": \"淞浦路187号\",\r\n" +
    16. " \"tel\": \"56671442\"\r\n" +
    17. " }, {\r\n" +
    18. " \"name\": \"水上公安局杨浦水上派出所\",\r\n" +
    19. " \"addr\": \"杨树浦路1291号\",\r\n" +
    20. " \"tel\": \"65898004\"\r\n" +
    21. " }, {\r\n" +
    22. " \"name\": \"水上公安局外滩水上派出所\",\r\n" +
    23. " \"addr\": \"中山东二路8弄3号\",\r\n" +
    24. " \"tel\": \"63305388\"\r\n" +
    25. " }, {\r\n" +
    26. " \"name\": \"水上公安局石洞口水上派出所\",\r\n" +
    27. " \"addr\": \"盛石路18号\",\r\n" +
    28. " \"tel\": \"56152176\"\r\n" +
    29. " }, {\r\n" +
    30. " },";
    31. JSONObject jsonObj=JSON.parseObject(s);
    32. System.out.println(jsonObj.getString("title"));
    33. //遍历方式一
    34. //获取key为list的value值(集合)
    35. //JSONArray extends java.util.ArrayList
    36. JSONArray jsonArray=jsonObj.getJSONArray("list");
    37. System.out.println(jsonArray.size());
    38. //遍历
    39. for(int i=0;i
    40. JSONObject item=jsonArray.getJSONObject(i);
    41. System.out.println("派出所的名称:"+item.getString("name"));
    42. System.out.println("派出所的地址:"+item.getString("addr"));
    43. System.out.println("派出所的电话:"+item.getString("tel"));
    44. System.out.println("--------------------------------------------");
    45. }

  • 相关阅读:
    vue中组件传值 引用页面与组件页面绑定参数 vue省市地区街道级联选择组件
    LeetCode允许重复选择元素的组合
    基于springboot的学生毕业选题管理系统
    核心实验11合集_hybrid接口特殊用法_ENSP
    CSS3转换属性—transform之translate、rotate、scale函数详解
    智能网联汽车基础软件信息安全需求分析
    Spring4 升级 spring5, Hibernate4 升级 Hibernate5 相关问题总结以及修改注意点
    物联网毕设 -- 人脸识别门禁系统(K210--HEX协议版本)
    第一章 C语言知识点(程序)
    OCR文字识别标注小助手
  • 原文地址:https://blog.csdn.net/w259149/article/details/125880228