2022-09-28encoding/json包的使用

encoding/json包的使用

這個包用于實現json的編解碼

Marshal/Unmarshal

核心函數:

//將struct編碼成json
func Marshal(v interface{}){[]byte,error}
//將json轉碼成struct結構體或map
func Unmarshal(data []byte,v interface{})error
//編碼
type Person struct {
   Name string 
   Age int32
   Email string
}

func main() {
   p := Person{
      Name: "hui",
      Age: 18,
      Email: "2650514653",
   }
   data ,err := json.Marshal(&p)
   if err!= nil {
      fmt.Println("err:=",err)
      return 
   }
   fmt.Println(string(data))
}

//解碼
type Person struct {
   Name string 
   Age int32
   Email string
}

func main() {
   var p1 Person
   json_byte := []byte(`{"Name":"hui","Age":18,"Email":"2650514653"}`)//json切片
   err :=json.Unmarshal(json_byte,&p1)//第二個參數要傳地址
   if err != nil {
      fmt.Println("json.Unmarshal err:=",err)
   }
   fmt.Println("p1:=",p1)
}
//不聲明對應結構體用空接口存儲
//直接用interface存結果
var p2 interface{}        //最后會自動轉化為一個map:map[Age:18 Email:2650514653 Name:hui]
//map的類型應該是map[string]interface{}類型适袜,用類型斷言
err  = json.Unmarshal(json_byte,&p2)
if err != nil {
    fmt.Println(err)
}
fmt.Printf("p2: %v\n", p2)

Decode/Encode

對json文件編解碼

decode:解碼json文件,將json文件的數據保存到結構體或者map中

//json文件解碼測試
func testdecode(){
   fd,_:=os.Open("a.json")
   json_encoder:=json.NewDecoder(fd)
   var data interface{}
   json_encoder.Decode(&data)  //自動轉換成map
   fmt.Println(data)
}

encode:以json格式寫結構體數據到json文件

type Person struct {
   Name string 
   Age int32
   Email string
   Family []string
}

func testencode(){
   p := Person{
      Name: "jian",
      Age: 20,
      Email: "984344367",
      Family: []string{
         "me",
         "you",
         "their",
      },
   }
   fd ,_:=os.OpenFile("a.json",os.O_WRONLY|os.O_CREATE,0777)
   defer fd.Close()
   encoder:=json.NewEncoder(fd) //創(chuàng)建一個encoder
   encoder.Encode(&p)       //將結構體信息以json格式保存到文件
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市闸餐,隨后出現的幾起案子吆倦,更是在濱河造成了極大的恐慌褥蚯,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異威始,居然都是意外死亡,警方通過查閱死者的電腦和手機像街,發(fā)現死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門黎棠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人镰绎,你說我怎么就攤上這事脓斩。” “怎么了畴栖?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵随静,是天一觀的道長。 經常有香客問我吗讶,道長燎猛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任照皆,我火速辦了婚禮重绷,結果婚禮上,老公的妹妹穿的比我還像新娘膜毁。我一直安慰自己昭卓,他們只是感情好愤钾,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著候醒,像睡著了一般绰垂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上火焰,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天劲装,我揣著相機與錄音,去河邊找鬼昌简。 笑死占业,一個胖子當著我的面吹牛,可吹牛的內容都是我干的纯赎。 我是一名探鬼主播谦疾,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼犬金!你這毒婦竟也來了念恍?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤晚顷,失蹤者是張志新(化名)和其女友劉穎峰伙,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體该默,經...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡瞳氓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了栓袖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匣摘。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖裹刮,靈堂內的尸體忽然破棺而出音榜,到底是詐尸還是另有隱情,我是刑警寧澤捧弃,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布赠叼,位于F島的核電站,受9級特大地震影響塔橡,放射性物質發(fā)生泄漏梅割。R本人自食惡果不足惜霜第,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一葛家、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧泌类,春花似錦癞谒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽向图。三九已至,卻和暖如春桌吃,著一層夾襖步出監(jiān)牢的瞬間朱沃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工茅诱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留逗物,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓瑟俭,卻偏偏與公主長得像翎卓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子摆寄,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內容