一、JSON是什么?

JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度。

JSON就是一串字符串 只不过元素会使用特定的符号标注。

存储结构是 KEY-VALUE
key为string类型
value为: String   Boolean   Number  数组   Object    null

 [] 中括号代表的是一个数组;
 {} 大括号代表的是一个对象
 "" 双引号表示的是属性值
:冒号代表的是前后之间的关系,冒号前面是属性的名称,后面是属性的值,这个值可以是基本数据类型,也可以是引用数据类型。

"格式完好"的JSON,就是要求指定的字符串必须符合严格的JSON格式,属性名称必须加双引号、字符串值也必须用双引号。例如:

{
"name": "teacher",     
"computer": {
    "CPU": "intel7",
    "disk": "512G"
    },
"students": [
    {
    "name": "张三",
    "age": 18,
    "sex": true
    },
    {
    "name": "李四",
    "age": 19,
    "sex": false
    }
    ]
}

二、JSON生成以及解析

JSON简记

我们经常用到的是实体类转换成JSONObject对象,以及解析JSON;

(1)四种实体类生成Json字符串

public void EntityToJson() throws IOException {

    Person person = new Person("张三", "男", 25);

    //1、利用传统方式

   JSONObject jsonObject = new JSONObject();

    jsonObject.put("name", person .getName());  

    jsonObject.put("sex", person .getSex());    

    jsonObject.put("age", person .getAge());

    System.out.println(jsonObject.toString());

    //2、利用Jackson方式

    ObjectMapper objectMapper = new ObjectMapper();

    String jsonString = objectMapper.writeValueAsString(person);

    //3、利用GSON方式

   Gson gson = new Gson();

   String jsonString = gson.toJson(person);

    //4、利用FastJSON方式

    Object jsonString = JSON.toJSON(person);

     System.out.println(jsonString.toString());

}

(2)Json字符串生成实体类

JSON解析一定要掌握的两条规则:

  • 1.如果看到是{ }–>使用JSONObject
  • 2.如果看到的[ ]–>使用JSONArray解析

public void JsonToEntity(){    

String jsonString = "{\"sex\":\"男\",\"name\":\"张三\",\"age\":25}";  

  //1、利用传统方式

JSONObject jsonObject = new JSONObject(jsonString);  

 Person person = new Person(jsonObject.get("name").toString(), jsonObject.get("sex").toString(), Integer.valueOf(jsonObject.get("age").toString()));    

//2、利用Jackson方式

 ObjectMapper objectMapper = new ObjectMapper();   

 Person person = objectMapper.readValue(jsonString, Person.class);

//3、利用GSON方式

Gson gson = new Gson();

Person person = gson.fromJson(jsonString, Person.class);

//4、利用FastJSON方式

Person person = JSON.parseObject(jsonString, Person.class);

}

另外:对于数组来说GSON和FastJSON各有自己的解析方式;详细方法参照API;

List<String> list =gson.fromJson(json2, new TypeToken<List<String>>(){}.getType());

List<Person > person List =gson.fromJson(json3, new TypeToken<List<Person >>(){}.getType());

List<String> list = JSON.parseArray(json2, String.class);

List<Person > userList = JSON.parseArray(json3, Person .class);

(3)根据JSON建立对象

{
    "desc": "OK",
    "status": 1000,
    "data": {
        "wendu": "20",
        "ganmao": "相对于今天将会出现大幅度降温,易发生感冒,请注意适当增加衣服,加强自我防护避免感冒。",
        "forecast": [
            {
                "fengxiang": "北风",
                "fengli": "3-4级",
                "high": "高温 27℃",
                "type": "中雨",
                "low": "低温 19℃",
                "date": "6日星期五"
            },
            {
                "fengxiang": "北风",
                "fengli": "微风级",
                "high": "高温 23℃",
                "type": "大雨",
                "low": "低温 17℃",
                "date": "7日星期六"
            },
            {
                "fengxiang": "北风",
                "fengli": "微风级",
                "high": "高温 26℃",
                "type": "小雨",
                "low": "低温 17℃",
                "date": "8日星期天"
            },
            {
                "fengxiang": "南风",
                "fengli": "微风级",
                "high": "高温 27℃",
                "type": "多云",
                "low": "低温 15℃",
                "date": "9日星期一"
            },
            {
                "fengxiang": "南风",
                "fengli": "微风级",
                "high": "高温 29℃",
                "type": "多云",
                "low": "低温 16℃",
                "date": "10日星期二"
            }
        ],
        "yesterday": {
            "fl": "微风",
            "fx": "北风",
            "high": "高温 33℃",
            "type": "阴",
            "low": "低温 22℃",
            "date": "5日星期四"
        },
        "aqi": "58",
        "city": "成都"
    }
}

数据略大,不方便看,这里给大家提供一个JSON在线解析工具http://www.bejson.com/count.html 自动格式化,方便观看。

JSON简记

分析:

    一:   第一个大括号(JSONObject){”desc”: “status”: “data”} 
    二:data里面有一个大括号(JSONObject){”wendu”  , “ganmao”,  “forecast”, “yesterday”,   “aqi”,  “city” } 
    三:第二个大括号里面有两个对象 1.数组形“forecast”(JSONArray) 2.对象形“yesterday”( JSONObject ) 
    而数组形里面又套有数组的对象{}
 

开始封装字段:

import java.util.List;

/**
 * 对应的字段的封装
 */
public class Weather {
//  外面大括号的字段封装 setter getter toString
    public String desc;
    public int status;
    public Data data;
    @Override
    public String toString() {
        return "Weather [desc=" + desc + ", status=" + status + ", data="
                + data + "]";
    }
}

class Data{
//  里面大括号的字段封装 setter getter toString 
//  该类中包含有数组形和对象形,需要一并的封装在里面
    public String wendu;
    public String ganmao;
    public List<Forecast> forecast;
    public Yesterday yesterday;
    public String aqi;
    public String city;
    @Override
    public String toString() {
        return "Data [wendu=" + wendu + ", ganmao=" + ganmao + ", forecast="
                + forecast + ", yesterday=" + yesterday + ", aqi=" + aqi
                + ", city=" + city + "]";
    }
}

class Forecast{
//  数组里面的大括号类型字段的封装
    public String fengxiang;
    public String fengli;
    public String high;
    public String type; 
    public String low;
    public String date;
    @Override
    public String toString() {
        return "Forecast [fengxiang=" + fengxiang + ", fengli=" + fengli
                + ", high=" + high + ", type=" + type + ", low=" + low
                + ", date=" + date + "]";
    }
}
class Yesterday{
//   最后{}的字段封装
    public String fl;
    public String fx;
    public String high;
    public String type;
    public String low;
    public String date;
    @Override
    public String toString() {
        return "Yesterday [fl=" + fl + ", fx=" + fx + ", high=" + high
                + ", type=" + type + ", low=" + low + ", date=" + date + "]";
    }

}
参考链接:

原文链接:https://blog.csdn.net/leosblog/article/details/80842640
原文链接:https://blog.csdn.net/lsh364797468/article/details/51347035
原文链接:https://blog.csdn.net/oman001/article/details/79063278

 

相关文章:

  • 2022-12-23
  • 2021-07-16
猜你喜欢
  • 2021-06-02
  • 2021-12-23
  • 2022-02-04
  • 2021-12-20
相关资源
相似解决方案