Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查golang中JSON对象数组中是否包含JSON_Json_Go - Fatal编程技术网

如何检查golang中JSON对象数组中是否包含JSON

如何检查golang中JSON对象数组中是否包含JSON,json,go,Json,Go,我有一个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 {

我有一个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"`
}
mongodb中的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中的unmarchal之后形成的,故意省略了错误检查

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
}
MongofId返回数据和错误。Data.TaiList数组是我要执行检查的数组

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

我尝试了下面的代码

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
}

但CheckTai函数返回false。 只有当只有一个JSON对象与列表匹配时,CheckTai才会返回true

{
      "taiList": [
        {
          "plmnId": {
            "mcc": "244",
            "mnc": "24"
          },
          "tac": "00001",
          "nid": "555"
        }

      ]
    }

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

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

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

编辑问题以显示问题。我们无法看到对CheckTai的调用或解组代码。带有示例数据的代码在操场上的工作与预期的一样:抱歉,我没有很好地框定问题,但我希望对“taiList”数组执行检查。我已经编辑了这个数组,对这个“taiList”数组的检查返回false,除非数组中只有一个“taiList”的JSON对象,在这种情况下它可以工作。我希望在给定的数组中,返回值应该为true。
true