为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
暮色呼如 2022-09-26 14:53:33
我有一个 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 Datafunc 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"        }      ]    }需要帮助或想法如何执行此检查。
查看完整描述

1 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

根据评论中的建议,我复制了您的方案,如下所示:


package main


import (

    "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


查看完整回答
反对 回复 2022-09-26
  • 1 回答
  • 0 关注
  • 59 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信