zoukankan      html  css  js  c++  java
  • JSON 数据

    总结

    /*
     序列化与反序列化
        序列化: 将go语言数据转化为JSON  ---  json.Marshal(goData)
      反序列化: 将JSON转化为GO语言数据. ---  json.Unmarshal(JSONBytes,goDataPtr)
    
     读写JSON文件
        编码: 将GO语言数据写出到JSON文件               ---- encoder := json.NewEncoder(dstFile) encoder.Encode(goData)
        解码: 将JSON文件中的数据读取为GO语言数据.    ---- encoder := json.NewDecoder(srcFile) encoder.Decode(goDataPtr)
    
     */

    【结构体数据】转【json】

     1 package main 
     2 
     3 import (
     4     "fmt"
     5     "encoding/json"
     6 
     7     )
     8 
     9 
    10 //结构体
    11 type Person struct {
    12     Name string
    13     Age int
    14     Rmb float64
    15     Sex bool
    16     Hobby []string
    17 }
    18 
    19 
    20 
    21 
    22 func main() {
    23 Person :=Person{"小小",50,123.45,true,[]string{"","",""}}
    24 
    25 bytes,err := json.Marshal(Person)
    26 if err !=nil{
    27     fmt.Println("序列化失败,err=",err)
    28     return
    29 }
    30     fmt.Println(string(bytes)) //强制类型转换bytes转为string
    31 }
    32 
    33 /*
    34 {"Name":"小小","Age":50,"Rmb":123.45,"Sex":true,"Hobby":["吃","喝","玩"]}
    35 */

    【map】转【json】

     

     1 package main 
     2 
     3 import (
     4     "fmt"
     5     "encoding/json"
     6 
     7     )
     8 
     9 func main() {
    10     dataMap :=make(map[string]interface{}) //stings做键,空接口做数值,任意类型。
    11     dataMap["Name"]=""
    12     dataMap["Age"]=50
    13     dataMap["Rmb"]=123.45
    14     dataMap["Sex"]=true    
    15     dataMap["Hobby"]=[]string{"","",""}
    16 
    17 
    18     bytes,err := json.Marshal(dataMap)
    19 if err !=nil{
    20     fmt.Println("序列化失败,err=",err)
    21     return
    22 }
    23     fmt.Println(string(bytes)) //强制类型转换bytes转为string
    24 
    25 }
    26 /*
    27 {"Age":50,"Hobby":["吃","喝","玩"],"Name":"小","Rmb":123.45,"Sex":true}
    28 */

     【切片】转【JSON】

     1 package main 
     2 
     3 import (
     4     "fmt"
     5     "encoding/json"
     6 
     7     )
     8 
     9 func main() {
    10 
    11     dataMap1 :=make(map[string]interface{}) //stings做键,空接口做数值,任意类型。
    12     dataMap1["Name"]=""
    13     dataMap1["Age"]=50
    14 
    15 
    16     dataMap2 :=make(map[string]interface{}) //stings做键,空接口做数值,任意类型。
    17     dataMap2["Name"]=""
    18     dataMap2["Age"]=60
    19 
    20     //将数据添加到切片中
    21      dataSlice := make([]map[string]interface{},0)
    22      dataSlice = append(dataSlice,dataMap1,dataMap2)
    23 
    24 
    25     bytes,err := json.Marshal(dataSlice)
    26 if err !=nil{
    27     fmt.Println("序列化失败,err=",err)
    28     return
    29 }
    30     fmt.Println(string(bytes)) //强制类型转换bytes转为string
    31 
    32 }
    33 
    34 /*
    35 [{"Age":50,"Name":"小"},{"Age":60,"Name":"大"}]
    36 */

     【JSON】转【map】

     1 package main
     2 
     3 import (
     4     "encoding/json"
     5     "fmt"
     6 )
     7 
     8 func main() {
     9     jsonStr := `{"Name":"小小","Age":50,"Rmb":123.45,"Sex":true,"Hobby":["","",""]}`
    10     jsonBytes := []byte(jsonStr) //将字符串转为字节数
    11     dataMap := make(map[string]interface{})
    12     err := json.Unmarshal(jsonBytes, &dataMap) //注意这里是&dataMap
    13     if err != nil {
    14         fmt.Println("反序列化有错误:", err)
    15         return
    16     }
    17     fmt.Println(dataMap)
    18 
    19 }
    20 /*
    21 map[Age:50 Rmb:123.45 Sex:true Hobby:[吃 喝 玩] Name:小小]
    22 
    23  */

    【JSON】 转【结构体】

     1 package main
     2 
     3 import (
     4     "encoding/json"
     5     "fmt"
     6 )
     7 
     8 var jsonStr = `{"Name":"小小","Age":50,"Rmb":123.45,"Sex":true,"Hobby":["","",""]}`
     9 
    10 func main() {
    11 
    12     //定义结构体
    13     type Person struct {
    14         Name  string
    15         Age   int
    16         Rmb   float64
    17         Sex   bool
    18         Hobby []string
    19     }
    20 
    21     jsonBytes := []byte(jsonStr) //将字符串转为字节数
    22     personPtr := new(Person)
    23 
    24     err := json.Unmarshal(jsonBytes, personPtr)
    25     if err != nil {
    26         fmt.Println("转换有错误:", err)
    27         return
    28     }
    29     fmt.Println(*personPtr)
    30 
    31 }
    32 
    33 /*
    34 {小小 50 123.45 true [吃 喝 玩]}
    35  */

    【JSON】转【map切片】

     1 package main
     2 
     3 import (
     4     "encoding/json"
     5     "fmt"
     6 )
     7 
     8 func main() {
     9 
    10     jsonStr := `[{"Name":"小小","Age":50,"Rmb":123.45,"Sex":true,"Hobby":["","",""]}]`   //切片是[]开头
    11     jsonBytes := []byte(jsonStr)
    12     dataSlice := make([]map[string]interface{}, 0)
    13 
    14     err := json.Unmarshal(jsonBytes, &dataSlice)
    15     if err != nil {
    16         fmt.Println("转换有错误:", err)
    17         return
    18     }
    19     fmt.Println(dataSlice)
    20 
    21 }
    22 /*
    23 [map[Age:50 Rmb:123.45 Sex:true Hobby:[吃 喝 玩] Name:小小]]
    24  */

     

    【JSON】转【结构体切片】

     1 package main
     2 
     3 import (
     4     "encoding/json"
     5     "fmt"
     6 )
     7 
     8 func main() {
     9 
    10     //定义结构体
    11     type Person struct {
    12         Name  string
    13         Age   int
    14         Rmb   float64
    15         Sex   bool
    16         Hobby []string
    17     }
    18 
    19     jsonStr := `[{"Name":"小小","Age":50,"Rmb":123.45,"Sex":true,"Hobby":["","",""]}]`
    20     jsonBytes := []byte(jsonStr)
    21     persons := make([]Person, 0)
    22 
    23     err := json.Unmarshal(jsonBytes, &persons)
    24     if err != nil {
    25         fmt.Println("转换有错误:", err)
    26         return
    27     }
    28     fmt.Println(persons)
    29 
    30 }
    31 /*
    32 [{小小 50 123.45 true [吃 喝 玩]}]
    33  */

    【编码映射】到【JSON文件】

     1 package main
     2 
     3 import (
     4     "encoding/json"
     5     "fmt"
     6     "os"
     7 )
     8 
     9 func main() {
    10 
    11     //go语言数据,此处为map
    12     dataMap1 := make(map[string]interface{}) //stings做键,空接口做数值,任意类型。
    13     dataMap1["Name"] = ""
    14     dataMap1["Age"] = 50
    15 
    16     //创建并打开目标JSON文件
    17     jsonFile, _ := os.OpenFile("C:/Go/xcy/src/check_list/main/b.json", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0666)
    18     defer jsonFile.Close()
    19 
    20     //创建目标文件的编码器
    21     decoder := json.NewEncoder(jsonFile)
    22 
    23     //将GO语言数据编码到JSON文件,判断编码是否成功,成功自动会创建文件.
    24     err := decoder.Encode(dataMap1)
    25     if err != nil {
    26         fmt.Println("转换有错误:", err)
    27         return
    28     }
    29     fmt.Println("编码成功")
    30 
    31 }
    32 
    33 /*
    34 cat a.json
    35 {"Age":50,"Name":"小"}
    36  */
    37 
    38 // (in-sync)
    39 //

    【编码结构体切片】转【JSON文件】

     1 package main
     2 
     3 import (
     4     "encoding/json"
     5     "fmt"
     6     "os"
     7 )
     8 
     9 func main() {
    10 
    11     //结构体
    12     type Person struct {
    13         Name  string
    14         Age   int
    15         Rmb   float64
    16         Sex   bool
    17         Hobby []string
    18     }
    19 
    20     p1 := Person{"大大", 100, 100.234, true, []string{"a", "b", "c"}}
    21     p2 := Person{"小小", 10, 100.234, true, []string{"a", "b", "c"}}
    22     pepole := make([]Person, 0)
    23     pepole = append(pepole, p1, p2)
    24 
    25     //创建并打开目标JSON文件
    26     jsonFile, _ := os.OpenFile("C:/Go/xcy/src/check_list/main/b.json", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
    27     defer jsonFile.Close()
    28 
    29     encoder := json.NewEncoder(jsonFile)
    30     err := encoder.Encode(pepole)
    31     if err != nil {
    32         fmt.Println("转换有错误:", err)
    33         return
    34     }
    35     fmt.Println("编码成功")
    36 
    37 }
    38 /*
    39 cat b.json
    40 [{"Name":"大大","Age":100,"Rmb":100.234,"Sex":true,"Hobby":["a","b","c"]},{"Name":"小小","Age":10,"Rmb":100.234,"Sex":true,"Hobby":["a","b","c"]}]
    41  */

    解码【JSON】 转 【MAP】

     1 package main
     2 
     3 import (
     4     "encoding/json"
     5     "fmt"
     6     "os"
     7 )
     8 
     9 func main() {
    10 
    11     //创建并打开目标JSON文件
    12     srcFile, _ := os.Open("C:/Go/xcy/src/check_list/main/b.json")
    13     defer srcFile.Close()
    14 
    15     //创建map,用与接受解码好的数据
    16     dataMap := make(map[string]interface{})
    17 
    18     //创建源文件的解码器
    19     decoder := json.NewDecoder(srcFile)
    20 
    21     //解码源文件中的数据,丢入dataMap
    22     err := decoder.Decode(&dataMap)
    23     if err != nil {
    24         fmt.Println("解码有错误:", err)
    25         return
    26     }
    27     fmt.Println("编码成功",dataMap)
    28 
    29 }
    30 /*
    31 结果:
    32 编码成功 map[Age:100 Rmb:100.234 Sex:true Hobby:[a b c] Name:大大]
    33 
    34 cat b.json
    35 {"Name":"大大","Age":100,"Rmb":100.234,"Sex":true,"Hobby":["a","b","c"]},{"Name":"小小","Age":10,"Rmb":100.234,"Sex":true,"Hobby":["a","b","c"]}
    36 
    37  */

    解码JSON文件为结构体切片

     1 package main
     2 
     3 import (
     4     "encoding/json"
     5     "fmt"
     6     "os"
     7 )
     8 
     9 func main() {
    10 
    11     //结构体
    12     type Person struct {
    13         Name  string
    14         Age   int
    15         Rmb   float64
    16         Sex   bool
    17         Hobby []string
    18     }
    19     //创建并打开目标JSON文件
    20     srcFile, _ := os.Open("C:/Go/xcy/src/check_list/main/b.json")
    21     defer srcFile.Close()
    22 
    23     //创建用于接收数据的变量.
    24     people := make([]Person, 0)
    25 
    26     //创建源文件的解码器
    27     decoder := json.NewDecoder(srcFile)
    28 
    29     //解码源文件中的数据,丢入dataMap
    30     err := decoder.Decode(&people)
    31     if err != nil {
    32         fmt.Println("解码有错误:", err)
    33         return
    34     }
    35     fmt.Println("编码成功", people)
    36 
    37 }
    38 /*
    39 结果:
    40 编码成功 [{大大 100 100.234 true [a b c]} {小小 10 100.234 true [a b c]}]
    41 
    42 cat b.json
    43 [{"Name":"大大","Age":100,"Rmb":100.234,"Sex":true,"Hobby":["a","b","c"]},{"Name":"小小","Age":10,"Rmb":100.234,"Sex":true,"Hobby":["a","b","c"]}]
    44 
    45  */

     

     

  • 相关阅读:
    【目录】processing
    【目录】Qt
    【目录】python
    【目录】linux
    【目录】多线程
    【目录】Leetcode
    【leetcode】Restore IP Addresses (middle)
    linux c编程訪问数据库
    『Spring.NET+NHibernate+泛型』框架搭建之Model(二)
    hdu1316(大数的斐波那契数)
  • 原文地址:https://www.cnblogs.com/chaoyangxu/p/11965658.html
Copyright © 2011-2022 走看看