JSON解析

目录

一、 JSON简介

二、 JSON语法

三、 JSON的用途

四、Java解析JSON

五、使用Fastjson


一、 JSON简介

   JSON是一种轻量级的数据交换格式。它基于 ECMAScriptEuropean Computer Manufacturers Association, 欧洲计算机协会制定的JavaScript规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

二、 JSON语法

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

2、每个数据由key:value键值对组成

3、数据之间使用逗号 , 分隔

4、使用 \ 进行特殊字符的转义

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


三、 JSON的用途

   JSON做为一种轻量级的数据格式,它的用途主要是在计算机系统之间进行数据的传递。JSON作为数据传输的格式,有几个显著的优点:

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

2、JSON内容仅包含key-value键值对,格式简单,不存在冗余结构,是一种轻量级结构;

3、浏览器内置JSON支持,如果把数据用JSON发送给浏览器,可以用JavaScript直接处理;

        所以,开发Web应用的时候,使用JSON作为数据传输,在浏览器端非常方便。因为JSON天生适合JavaScript处理,所以,绝大多数REST API都选择JSON作为数据传输格式。

四、Java解析JSON

       在使用Java进行应用程序的开发中,我们会面临类似“将Java对象转换成JSON格式”或者“将JSON格式的数据转换成Java对象“的需求,所以我们需要掌握如何使用第三方库来进行JSON格式数据的解析。

常用的用于解析JSON的第三方库有:

  • Jackson
  • Gson
  • Fastjson 


五、使用Fastjson

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

1、 Fastjson 的优点:速度快、使用广泛、测试完备使用简单、功能完备

2、Fastjson的主要对象:

(1)JSON接口:提供json解析操作的入口方法,用于原始转换

(2)JSONObject类 : 封装json格式的对象。

(3)JSONArray 类: 封装json格式的集合。

3、 JSON接口

    JSON接口的作用主要是用于原始转换:Java对象序列化为JSON字符串 或 将JSON字符串反序列化为Java对象。常用方法有三个,分别是:

(1)JSON.toJSONString(Object object):将Java对象 "序列化"(转换) 为JSON字符串

// 实体数据
Weather weather = new Weather();
weather.setCity("西安");
weather.setComfort_index("非常舒适");
weather.setDate_y("2022年07月10日");

// 转换为json格式的字符串
String json = JSON.toJSONString(weather);
System.out.println(json);

(2)JSON.parseObject(String text):将JSON字符串反序列化为Java对象

  String jsonString ="{\"city\":\"西安\",\"temperature\":\"42\",\"weather\":\"炎热\",\"wind\":\"微微风\"}";
        //1、将JSON格式的字符串转换为JSON格式的对象
        JSONObject jsonObject = JSON.parseObject(jsonString);
        System.out.println(jsonObject.get("city"));
        System.out.println(jsonObject.get("temperature"));
        System.out.println(jsonObject.get("weather"));
        System.out.println(jsonObject.get("wind"));
        System.out.println("================");

        //2、将JSON格式的字符串转换为JavaBean对象
        //参数一,序列化成JSON格式的字符串,参数二、指定的JavaBean对象类型
        Weather w1 = JSON.parseObject(jsonString, Weather.class);
        System.out.println(w1.getCity());
        System.out.println(w1.toString());

        //3、第二种方式转成JavaBean
        System.out.println(w1.toString());
        Weather w2 = JSON.parseObject(jsonString,new TypeReference<Weather>(){});
        System.out.println(w2.toString());

(3)JSON.parseArray(String text):将JSON字符串反序列化为JSONArray集合数组

package com.yuan.jsonclass;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.TypeReference;

import java.util.Collection;
import java.util.Iterator;
import java.util.Map;

public class Demo06 {
    public static void main(String[] args) {
        String jsonString = "{\"城市1\":{\"city\":\"西安\",\"temperature\":\"42\",\"weather\":\"炎热\",\"wind\":\"微微风\"},\"城市2\":{\"city\":\"西安\",\"temperature\":\"42\",\"weather\":\"炎热\",\"wind\":\"微微风\"}}";
        //将JSON格式字符串转JSON格式对象
        JSONObject jsonObject = JSON.parseObject(jsonString);
        //getJSONObject()返回值为JSON格式对象
        JSONObject jsonObject1 = jsonObject.getJSONObject("城市一");
        System.out.println(jsonObject1.get("city"));
        JSONObject jsonObject2 = jsonObject.getJSONObject("城市二");
        System.out.println(jsonObject2.get("city"));

        //getObject()
        Weather w1 = jsonObject.getObject("城市一", Weather.class);
        System.out.println("城市一的名称为" + w1.getCity());
        Weather w2 = jsonObject.getObject("城市二", Weather.class);
        System.out.println("城市二的名称为" + w2.getCity());

        System.out.println("=====================");
        Map<String, Weather> map = JSON.parseObject(jsonString, new TypeReference<Map<String, Weather>>() {
        });
        //获取所有的值进行遍历
        Collection<Weather> weathers = map.values();
        Iterator<Weather> itor = weathers.iterator();
        while (itor.hasNext()) {
            System.out.println(itor.next().getCity());
        }
    }
}

4、JSONObject类: 底层 LinkedHashMap<String, Object>

JSON对象JSONObject中的数据都是以key-value形式出现,常用的方法:

(1)Object get(String key):获取键对应的值。

(2)getJSONObject(String key):获取该键对应的一个JSONObject对象返回值为JSONObject

(3)getJSONArray(String key):获取该键对应的一个JSONArray对象返回值为JSONArray

5、 JSONArray类:底层 ArrayList<Object>

   JSONArray则是JSON数组,JSON数组对象中存储的是若干个JSONObject对象,所以类中的方法主要用于直接操作JSONObject对象,常用的方法:

(1)getJSONArray(int index):获取index下标位置对应的value,返回值JSONArray

(2)getJSONObject(int index):获取index下标位置对应的value,返回值JSONObject

package com.yuan.jsonclass;

/**
 * @author 张老师
 * @version 1.0
 * @since 2025/7/29
 */
 public class Weather {
    private String temperature; // 温度
    private String weather; // 天气
    private String wind; // 风力
    private String week; // 星期
    private String city; // 城市

    private String date_y; // 日期

    private String dressing_index; // 穿衣指数
    private String dressing_advice; // 穿衣建议
    private String uv_index; // 紫外线指数

    private String comfort_index; // 舒适指数

    private String wash_index; // 洗衣指数
    private String travel_index; // 旅行指数
    private String exercise_index; // 晨练指数
    private String drying_index; // 晾晒指数

    public void setTemperature(String temperature) {
        this.temperature = temperature;
    }

    public String getTemperature() {
        return temperature;
    }

    public void setWeather(String weather) {
        this.weather = weather;
    }

    public String getWeather() {
        return weather;
    }

    public void setWind(String wind) {
        this.wind = wind;
    }

    public String getWind() {
        return wind;
    }

    public void setWeek(String week) {
        this.week = week;
    }

    public String getWeek() {
        return week;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getCity() {
        return city;
    }

    public void setDate_y(String date_y) {
        this.date_y = date_y;
    }

    public String getDate_y() {
        return date_y;
    }

    public void setDressing_index(String dressing_index) {
        this.dressing_index = dressing_index;
    }

    public String getDressing_index() {
        return dressing_index;
    }

    public void setDressing_advice(String dressing_advice) {
        this.dressing_advice = dressing_advice;
    }

    public String getDressing_advice() {
        return dressing_advice;
    }

    public void setUv_index(String uv_index) {
        this.uv_index = uv_index;
    }

    public String getUv_index() {
        return uv_index;
    }

    public void setComfort_index(String comfort_index) {
        this.comfort_index = comfort_index;
    }

    public String getComfort_index() {
        return comfort_index;
    }

    public void setWash_index(String wash_index) {
        this.wash_index = wash_index;
    }

    public String getWash_index() {
        return wash_index;
    }

    public void setTravel_index(String travel_index) {
        this.travel_index = travel_index;
    }

    public String getTravel_index() {
        return travel_index;
    }

    public void setExercise_index(String exercise_index) {
        this.exercise_index = exercise_index;
    }

    public String getExercise_index() {
        return exercise_index;
    }

    public void setDrying_index(String drying_index) {
        this.drying_index = drying_index;
    }

    public String getDrying_index() {
        return drying_index;
    }

    @Override
    public String toString() {
        return "Weather{" +
                "temperature='" + temperature + '\'' +
                ", wind='" + wind + '\'' +
                ", city='" + city + '\'' +
                ", weather='" + weather + '\'' +
                '}';
    }
}
package com.yuan.jsonclass;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.TypeReference;

import java.util.List;

public class Demo05 {
    public static void main(String[] args) {
        String jsonString="[{\"city\":\"西安\",\"temperature\":\"42\",\"weather\":\"炎热\",\"wind\":\"微微风\"},{\"city\":\"锡林郭勒\",\"temperature\":\"22\",\"weather\":\"凉爽\",\"wind\":\"微风\"}]";
        //方法3:
        JSONArray jsonArray = JSON.parseArray(jsonString);
        for (int i = 0; i <jsonArray.size() ; i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            System.out.println(jsonObject.get("city")+"__"+jsonObject.get("temperature"));
        }

        System.out.println("=================");
        //将List集合JSON。parseArray(jsonString,Weather.class)将JSON格式字符串转换成集合类型
        List<Weather> w1 = JSON.parseArray(jsonString, Weather.class);
        for (Weather w:w1) {
            System.out.println(w.getCity()+"__"+w.getWind());
        }

        System.out.println("=================");
        ////new TypeReference<List<Weather>>(){}是万能的,可以转成javabean对象,在T处传入泛型类型
        List<Weather> list= JSON.parseObject(jsonString, new TypeReference<List<Weather>>(){});
        for (Weather w:list) {
            System.out.println(w.getTemperature()+"__"+w.getWeather());
        }


    }
}
package com.yuan.jsonclass;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.TypeReference;

import java.util.Collection;
import java.util.Iterator;
import java.util.Map;

public class Demo06 {
    public static void main(String[] args) {
        String jsonString = "{\"城市1\":{\"city\":\"西安\",\"temperature\":\"42\",\"weather\":\"炎热\",\"wind\":\"微微风\"},\"城市2\":{\"city\":\"西安\",\"temperature\":\"42\",\"weather\":\"炎热\",\"wind\":\"微微风\"}}";
        //将JSON格式字符串转JSON格式对象
        JSONObject jsonObject = JSON.parseObject(jsonString);
        //getJSONObject()返回值为JSON格式对象
        JSONObject jsonObject1 = jsonObject.getJSONObject("城市一");
        System.out.println(jsonObject1.get("city"));
        JSONObject jsonObject2 = jsonObject.getJSONObject("城市二");
        System.out.println(jsonObject2.get("city"));

        //getObject()
        Weather w1 = jsonObject.getObject("城市一", Weather.class);
        System.out.println("城市一的名称为" + w1.getCity());
        Weather w2 = jsonObject.getObject("城市二", Weather.class);
        System.out.println("城市二的名称为" + w2.getCity());

        System.out.println("=====================");
        Map<String, Weather> map = JSON.parseObject(jsonString, new TypeReference<Map<String, Weather>>() {
        });
        //获取所有的值进行遍历
        Collection<Weather> weathers = map.values();
        Iterator<Weather> itor = weathers.iterator();
        while (itor.hasNext()) {
            System.out.println(itor.next().getCity());
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呼哧呼哧.

栓Q!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值