如何检查golang中JSON对象数组中是否包含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 {
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