在使用golang處理json數(shù)據(jù)時(shí),有時(shí)會(huì)遇到不規(guī)則的json數(shù)據(jù)。這種數(shù)據(jù)往往不能被標(biāo)準(zhǔn)的json庫(kù)解析,導(dǎo)致程序出錯(cuò)。例如:
{ "name": "Alice", "age": 25, "address": { "country": "USA", "city": "New York" } "phone_numbers": { "home": "123-456-7890", "work": "987-654-3210" "cell": "555-555-5555" } }
在這個(gè)json中,"address"和"phone_numbers"都是對(duì)象,但"phone_numbers"的最后一個(gè)成員"cell"缺少了逗號(hào)。這種json雖然在其他語言中可以使用某些庫(kù)進(jìn)行解析,但標(biāo)準(zhǔn)的json庫(kù)在golang中是不能支持的。
當(dāng)處理不規(guī)則json時(shí),我們可以使用golang中的第三方庫(kù)"jsoniter"。
// 導(dǎo)入jsoniter庫(kù) import github.com/json-iterator/go // 解碼json var json = jsoniter.ConfigCompatibleWithStandardLibrary err := json.Unmarshal(jsonStr, &result)
jsoniter庫(kù)和標(biāo)準(zhǔn)的json庫(kù)非常相似,只需要在導(dǎo)入時(shí)使用jsoniter庫(kù),然后通過jsoniter.ConfigCompatibleWithStandardLibrary獲取一個(gè)兼容標(biāo)準(zhǔn)庫(kù)的json對(duì)象,即可使用庫(kù)提供的方法進(jìn)行解析。其中"jsonStr"是待解碼的json字符串,"result"是解碼后的對(duì)象。
使用jsoniter庫(kù)可以更方便地處理不規(guī)則的json數(shù)據(jù),讓我們的程序更加穩(wěn)定可靠。