golang 網(wǎng)絡(luò)編程(10)文本處理

golang_real.jpg

Json 處理

現(xiàn)在大部分我們從服務(wù)端獲取數(shù)據(jù)都是Json 格式绍撞,所以對 json 格式數(shù)據(jù)處理在 web 應(yīng)用開發(fā)中顯得至關(guān)重要露戒。有關(guān) json 我想大家再熟悉不過了硕旗,這里就簡單地提一句争舞,json 就是一種輕量級的數(shù)據(jù)交換語言士修。盡管 json 是 javascript 的一個子集枷遂,但 json 是獨立于語言的文本格式。

{
    "data":[
        {
            "title":"angular base tut",
            "author":"zidea"
        }
    ]
}

定義與上面 Json 數(shù)據(jù)對應(yīng)的結(jié)構(gòu)體 TutTutReponse 少寫一個字母棋嘲。json 數(shù)組對應(yīng) go 語言中slice酒唉。
這里結(jié)構(gòu) struct 的字段需要大寫,如果 json 字段多于結(jié)構(gòu)體沸移,找不到對應(yīng)字段就會被忽略黔州。

type Tut struct{
    Title string
    Author string
}

type TutReponse struct{
    Data []Tut
}
package main

import(
    "encoding/json"
    "fmt"
)

type Tut struct{
    Title string
    Author string
}

type TutReponse struct{
    Data []Tut
}

func main() {
    var tuts TutReponse
    str := `{"data":[{"title":"angular base tut","author":"zidea"}]}`
    json.Unmarshal([]byte(str),&tuts)
    fmt.Println(tuts)
}
json.Unmarshal([]byte(str),&tuts)

這是解析 json 的函數(shù)耍鬓,接受 []byte 和表示任意類型接口作為參數(shù),所以我們的 json 需要轉(zhuǎn)為 []byte 才能使用流妻。

func Unmarshal(data []byte, v interface{}) error

因為 interface{} 可以表示任何類型的對象牲蜀,這正和解析 json 的未知數(shù)據(jù)結(jié)構(gòu),在 Json 包中采用map[string]interface{} 和 []interface{} 結(jié)構(gòu)來存儲任意的 Json 對象和數(shù)組

  • bool 代表 JSON boolean
    b := []byte (`{"name":"zidea","age":30,"lang":["java","javascript","go","cpp","rust"]}`)
    var f interface{}
    err := json.Unmarshal(b, &f)
    if err != nil{
        log.Fatal("json encoding:",err)
    }
    fmt.Println(f)
map[name:zidea age:30 lang:[java javascript go cpp rust]]

用之前我們學(xué)習(xí)有關(guān) map 和接口類型推斷知識來手動解析一下這個 json
golang 基礎(chǔ)(16)map
golang 基礎(chǔ)(20)接口

    m := f.(map[string]interface{})

    for k, v := range m{
        switch vv := v.(type){
        case string:
            fmt.Println(k, "is string", vv)
        case int:
            fmt.Println(k," is int ",vv)
        case []interface{}:
            fmt.Println(k," is an arry:")
            for i, u := range vv{
                fmt.Println(i,u)
            }
        default:
            fmt.Println(k," is  of a type ")
        }
    }
map[age:30 lang:[java javascript go cpp rust] name:zidea]
name is string zidea
age  is  of a type
lang  is an arry:
0 java
1 javascript
2 go
3 cpp
4 rust

生成 Json

package main

import(
    "encoding/json"
    "fmt"
)

type Tut struct{
    Title string
    Author string
}

type TutResponse struct{
    Data []Tut
}

func main() {
    var tutResponse TutResponse
    tutResponse.Data = append(tutResponse.Data, Tut{Title:"vuejs basic tut",Author:"zidea"})
    b, err := json.Marshal(tutResponse)

    if err != nil {
        fmt.Println("json err:", err)
    }

    fmt.Println(string(b))
}
b, err := json.Marshal(tutResponse)

輸入一個結(jié)構(gòu)體返回字節(jié)數(shù)組绅这。


th-9.jpeg
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涣达,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子证薇,更是在濱河造成了極大的恐慌度苔,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浑度,死亡現(xiàn)場離奇詭異寇窑,居然都是意外死亡,警方通過查閱死者的電腦和手機箩张,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門甩骏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人先慷,你說我怎么就攤上這事饮笛。” “怎么了论熙?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵福青,是天一觀的道長。 經(jīng)常有香客問我脓诡,道長无午,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任祝谚,我火速辦了婚禮指厌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘踊跟。我一直安慰自己踩验,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布商玫。 她就那樣靜靜地躺著箕憾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拳昌。 梳的紋絲不亂的頭發(fā)上袭异,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天,我揣著相機與錄音炬藤,去河邊找鬼御铃。 笑死碴里,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的上真。 我是一名探鬼主播咬腋,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼睡互!你這毒婦竟也來了根竿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤就珠,失蹤者是張志新(化名)和其女友劉穎寇壳,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妻怎,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡壳炎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了逼侦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匿辩。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖偿洁,靈堂內(nèi)的尸體忽然破棺而出撒汉,到底是詐尸還是另有隱情沟优,我是刑警寧澤涕滋,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站挠阁,受9級特大地震影響宾肺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜侵俗,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一锨用、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧隘谣,春花似錦增拥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至码泛,卻和暖如春猾封,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背噪珊。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工晌缘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留齐莲,地道東北人。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓磷箕,卻偏偏與公主長得像选酗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子搀捷,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內(nèi)容