<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] >[success] ## **1:json(JavaScript Object Notation)** ### **1.1:json基本介紹** JSON(JavaScript Object Notation)是一種輕量級的數據交換格式。易于人閱讀和編寫。同時也易于機器解析和生成。key-val JSON是在2001年開始推廣使用的數據格式,目前已經成為主流的數據格式。 JSON易于機器解析和生成,并有效地提升**網絡傳輸效率**,通常程序在網絡傳輸時會先將**數據(結構體、map等)序列化成json字符串到接收方得到json字符串時,在反序列化恢復成原來的數據類型(結構體、map等)** 這種方式已然成為各個語言的標準。 ![](https://img.kancloud.cn/5b/ad/5bad5dcf7ba0dd8229b17fd18590688e_1280x497.png) ### **1.2:json數據格式** 在JS語言中,一切都是對象。因此,任何支持的類型都可以通過JSON來表示,例如字符串、數字、對象、數組等. JSON鍵值對是用來保存數據一種方式, 鍵/值對組合中的鍵名寫在前面并用雙引號""包裹,使用冒號:分隔,然后緊接著值: ``` { ????"code":1, ????"msg":"success", ????"data":{ ????????"name":"pig", ????????"age":"18", ????????"sex":"man", ????????"hometown":{ ????????????"province":"江西省", ????????????"city":"撫州市", ????????????"county":"崇仁縣" ????????} ????} } ``` ### **1.3:Marshal()與unmarshal** Json Marshal:將數據編碼成json字符串(序列化) Json Unmarshal:將json字符串解碼到相應的數據結構(反序列化) **應用實例如下**: ![](https://img.kancloud.cn/0c/59/0c59ae077c44af12f041e26aa154560b_1280x353.png) ![](https://img.kancloud.cn/94/88/94885bf56f65ad759df044755bd7944a_1280x302.png) ![](https://img.kancloud.cn/f4/6a/f46ac35c557714926a39c144590b41f5_909x720.png) <br> <br> ### **1.4:使用json tag指定字段名** 序列化與反序列化默認情況下使用結構體的字段名,我們可以通過給結構體字段添加tag來指定json序列化生成的字段名 案例如下: ![](https://img.kancloud.cn/bb/a8/bba83a03a7561ba64dfb65e7e5cce757_1280x250.png) ### **1.5:json的序列化** json序列化是指,將有**key-value**?結構的數據類型(比如結構體、map、切片)序列化成json字符串 這里我們介紹一下**結構**體,**map**和**切片**的序列化 **序列化方法:官網解釋如下:** **func?[Marshal]** **func Marshal(v interface{}) (\[\]byte, error)** Marshal函數返回v的json編碼。 Marshal函數會遞歸的處理值。如果一個值實現了Marshaler接口切非nil指針,會調用其MarshalJSON方法來生成json編碼。nil指針異常并不是嚴格必需的,但會模擬與UnmarshalJSON的行為類似的必需的異常。 否則,Marshal函數使用下面的基于類型的默認編碼格式: 布爾類型編碼為json布爾類型。 浮點數、整數和Number類型的值編碼為json數字類型。 字符串編碼為json字符串。角括號""會轉義為"\\u003c"和"\\u003e"以避免某些瀏覽器吧json輸出錯誤理解為HTML。基于同樣的原因,"&"轉義為"\\u0026"。 數組和切片類型的值編碼為json數組,但\[\]byte編碼為base64編碼字符串,nil切片編碼為null。 結構體的值編碼為json對象。每一個導出字段變成該對象的一個成員。 * [ ] 自己解釋:Marshal方法接受一個interface,而我們在學方法時曾說過,接受類型是**interface可以接受任何數據類型**,Marshal方法返回兩個參數,**一個byte切片,一個error報錯** * [ ] **注意:Marshal內部會做一個判斷,如果該v中的字段可以用則序列化,不可以用(例如小寫)則不取出--------Marshal內部有反射機制** #### **1.5.1:結構體序列化:** ![](https://img.kancloud.cn/47/5d/475d432f1c73d126e584fc60bf858e4e_1280x709.png) #### **1.5.2:map序列化** ![](https://img.kancloud.cn/41/b6/41b687a7d8caa82b9238d17753e8d2ea_1280x465.png) #### **1.5.3:Slice序列化** ![](https://img.kancloud.cn/9a/6c/9a6c9d51e3681465169a9205529d3c10_1022x720.png) <br> <br> >[success] ## **2:json之反序列化Unmarshal** <br> ### **1:基本概念:** * [ ] **反序列化介紹** json反序列化是指,將json字符串反序列化成對應的數據類型(比如結構體、map、 切片)的操作。 * [ ] **Json.Unmarshal()** <br> ### **2:反序列化結構體** 在反序列化中,例如要把json字符串反序列化成結構體,那必須要定義一個結構體,字段和數據類型相同的結構體,才可以 ![](https://img.kancloud.cn/0a/5e/0a5ea147a8d1db3a92933fd419d0b50e_1280x713.png) <br> ### **3:反序列化map** 注意:在使用map反序列化時,不需要make,因為Unmarshal在執行中,會監測到如果是map它內部會自動make,所以不需要自己手動在make一下 ![](https://img.kancloud.cn/63/1d/631d73a85eb7554c325209e1d481abc6_1440x900.png) <br> <br> ### **4:反序列化slice** ![](https://img.kancloud.cn/6f/31/6f31cbc04dd594af8ac137b828a5728b_1419x720.png) ``` package main import( "fmt" "encoding/json" ) func unmarshalslice(){ num := "[{\"address\":\"武當山\",\"age\":\"800\",\"name\":\"張三豐\"},"+"{\"address\":\"云游四海\",\"age\":\"29\",\"city\":[\"上海\",\"北京\",\"西藏\"],\"name\":\"令狐沖\"}]" var slice []map[string]interface{} // 反序列化,不需要make,因為make這個操作被封裝到Unmarshal函數里 err := json.Unmarshal([]byte(num),&slice) if err != nil{ fmt.Println("切片反序列化失敗") } fmt.Println(slice) } func main(){ unmarshalslice() } ``` <br> <br> ### **4:反序列化總結:** * [ ] json字符串反序列化中,要確保,**反序列化數據類型**和原來的**數據類型一致** * [ ] 通過程序獲取不要轉譯字符【\\】
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看