如何检查 JSON 是否包含在戈朗的数组 JSON 对象中

我有一个 JSON 对象数组,作为


结构:


type Data struct {

    TaiList []Tai `json:"taiList"`

}


type Tai struct {

    PlmnId *PlmnId `json:"plmnId"`


    Tac string `json:"tac"`


    Nid string `json:"nid"`

}


type PlmnId struct {

    Mcc string `json:"mcc"`


    Mnc string `json:"mnc"`

}

蒙哥德百科中的 JSON 的格式为



[

{

    "taiList": [

          {

            "plmnId": {

                "mcc": "244",

                "mnc": "24"

            },

            "tac": "00001",

            "nid": "99"

        },

        {

            "plmnId": {

                "mcc": "244",

                "mnc": "34"

            },

            "tac": "00001",

            "nid": "555"

        }

    ]

}, 

{

    "taiList": [

       {

        "plmnId": {

            "mcc": "244",

            "mnc": "24"

        },

        "tac": "00001",

        "nid": "99"

      }

    ]

}

]

JSON “taiList”是在从 mongodb 取消封口后形成的,有意省略了错误检查。


func MongoFind(id string) (Data, error) {


    filter := bson.M{"_id": id}

    var (

        result model.Data


    )

    ...

    DB.Collection(tailistCollection).FindOne(context.TODO(),filter).Decode(&result)

    ...

    return result, nil

}

蒙戈查找返回数据和错误。数据.TaiList数组是我想执行检查的。


我想检查JSON对象“ta”是否包含在“taiList”中。


 var ta = model.Tai{

    PlmnId: &model.PlmnId{Mcc: "244", Mnc: "34"},

    Tac:    "00001",

    Nid:    "555",

}

我尝试了下面的代码


var data Data


func CheckTai(ta models.Tai, data Data) bool {

    for _, Tai := range data.TaiList {

        if reflect.DeepEqual(Tai, ta) {

            return true

        }

    }

    return false

}


但检查泰函数返回错误。仅当只有一个 JSON 对象与列表匹配时,检查泰才会返回 true


{

      "taiList": [

        {

          "plmnId": {

            "mcc": "244",

            "mnc": "24"

          },

          "tac": "00001",

          "nid": "555"

        }


      ]

    }

需要帮助或想法如何执行此检查。


暮色呼如
浏览 60回答 1
1回答

白衣非少年

根据评论中的建议,我复制了您的方案,如下所示:package mainimport (    "encoding/json"    "fmt"    "log"    "reflect")type Data struct {    TaiList []Tai `json:"taiList"`}type Tai struct {    PlmnId *PlmnId `json:"plmnId"`    Tac string `json:"tac"`    Nid string `json:"nid"`}type PlmnId struct {    Mcc string `json:"mcc"`    Mnc string `json:"mnc"`}var data = []byte(`{    "taiList": [      {        "plmnId": {            "mcc": "244",            "mnc": "24"        },        "tac": "00001",        "nid": "99"        },        {        "plmnId": {            "mcc": "244",            "mnc": "34"        },        "tac": "00001",        "nid": "555"        }    ]}`)var ta = Tai{    PlmnId: &PlmnId{Mcc: "244", Mnc: "34"},    Tac:    "00001",    Nid:    "555",}func CheckTai(ta Tai, data Data) bool {    for _, Tai := range data.TaiList {        if reflect.DeepEqual(Tai, ta) {            return true        }    }    return false}func main() {    var v Data    err := json.Unmarshal(data, &v)    if err != nil {        log.Fatal(err)    }    fmt.Println(CheckTai(ta, v))}输出:true
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go