第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在 golang 中檢查 JSON 字符串是否有效

在 golang 中檢查 JSON 字符串是否有效

Go
冉冉說 2022-06-27 16:24:35
我想檢查來自我的應(yīng)用程序的接口是否是有效的 json。我已經(jīng)搜索過了。它可能是這里的重復(fù):重復(fù)(但它不起作用)我找到了一些方法。其中之一是編組然后解組接口,如下面的代碼:func isJSONClasic(i interface{}) bool {    x, err := json.Marshal(i)    if err != nil {        fmt.Printf("error: %+v\n", err)    }    var temp interface{}    return json.Unmarshal(x, &temp) == nil}我使用的另一種方法是 gjson 包。根據(jù)此處的文檔,它具有ValidBytes方法。它需要一個(gè)字節(jié)數(shù)組并返回驗(yàn)證。我使用的功能如下:func isJSONGjson(i interface{}) bool {    x, err := json.Marshal(i)    if err != nil {        fmt.Printf("error: %+v\n", err)    }    return gjson.ValidBytes(x)}我使用的示例數(shù)據(jù)是{"name""latif"}。很容易看出它不是一個(gè)有效的 json。(我也在這里測(cè)試過)當(dāng)我用 2 個(gè)函數(shù)測(cè)試數(shù)據(jù)時(shí),我希望它們應(yīng)該打印 false 作為驗(yàn)證的結(jié)果,但我對(duì)它們都正確。我測(cè)試的整個(gè)代碼和結(jié)果如下: package mainpackage mainimport (    "encoding/json"    "fmt"    "github.com/tidwall/gjson")func main() {    var data interface{}    data = `{"name""latif"}`    isValid := isJSONClasic(data)    fmt.Printf("%+v\n", isValid)    isValid = isJSONGjson(data)    fmt.Printf("%+v\n", isValid)}func isJSONClasic(i interface{}) bool {    x, err := json.Marshal(i)    if err != nil {        fmt.Printf("error: %+v\n", err)    }    var temp interface{}    return json.Unmarshal(x, &temp) == nil}func isJSONGjson(i interface{}) bool {    x, err := json.Marshal(i)    if err != nil {        fmt.Printf("error: %+v\n", err)    }    return gjson.ValidBytes(x)}輸出如下:即使樣本數(shù)據(jù)無效,我也是如此。這里有什么問題?如何使用 golang 學(xué)習(xí) json 是否有效?
查看完整描述

1 回答

?
Cats萌萌

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊

這里有一個(gè)例子:


package main


import (

    "bytes"

    "encoding/gob"

    "encoding/json"

    "fmt"

)


func main() {

    var data interface{}

    data = `{"name""latif"}`

    valid := `{"name":"latif"}`


    isValid := isValidJSON(data)

    fmt.Printf("%+v\n", isValid)

    isValid = isValidJSON(valid)

    fmt.Printf("%+v\n", isValid)

}


func isValidJSON(i interface{}) bool {

    var str map[string]string

    data, err := getBytes(i)

    if err != nil {

        panic(err.Error())

    }

    data = data[4:]

    err = json.Unmarshal(data, &str)

    return err == nil

}


func getBytes(i interface{}) ([]byte, error) {

    var buf bytes.Buffer

    enc := gob.NewEncoder(&buf)

    err := enc.Encode(i)

    if err != nil {

        return nil, err

    }

    return buf.Bytes(), nil

}

注意:編碼后的前4個(gè)字節(jié)interface必須[]byte被刪除


結(jié)果:


false

true


查看完整回答
反對(duì) 回復(fù) 2022-06-27
  • 1 回答
  • 0 關(guān)注
  • 274 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)