JSON簡記

一、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生成以及解析

我們經常用到的是實體類轉換成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 自動格式化,方便觀看。

分析:

    一:   第一個大括號(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 + "]";
    }

}

將數據封裝成json格式

json有兩種格式:
(1)對象格式:   JSONObject.fromObject
{“key1”:obj,”key2”:obj,”key3”:obj…}

1、Map集合

Map map = new HashMap();
map.put("name", "json");
map.put("bool", Boolean.TRUE);
map.put("int", new Integer(1));
map.put("arr", new String[] { "a", "b" });
JSONObject json = JSONObject.fromObject(map);
————————————————

2、Bean

JSONObject jsonObject = JSONObject.fromObject(new JsonBean());

————————————————


(2)數組/集合格式:   JSONArray.fromObject
[obj,obj,obj…]

1、數組

boolean[] boolArray = new boolean[] { true, false, true };
JSONArray jsonArray1 = JSONArray.fromObject(boolArray);

————————————————

2、一般數據

JSONArray jsonArray2 = JSONArray.fromObject("['json','is','easy']" );

————————————————

3、List集合

List list = new ArrayList();
list.add( "first" );
list.add( "second" );
JSONArray jsonArray3 = JSONArray.fromObject( list );
————————————————

 

 


參考鏈接:

原文鏈接:https://blog.csdn.net/Xxacker/article/details/84949454

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章