gpt4 book ai didi

go - 如何将JSON响应中的特定数组值转换为只是数组中的第一个值?

转载 作者:行者123 更新时间:2023-12-01 21:22:00 25 4
gpt4 key购买 nike

(请注意,此问题不是必需的Dgraph;这只是我遇到问题时所使用的工具)

假设您有一些结构

type AccountSettings struct {
Uid string `json:"uid"`
DType string `json:"dgraph.type"`
Name string `json:"name"`
Username string `json:"username"`
}

type Settings struct {
Uid string `json:"uid"`
DType string `json:"dgraph.type"`
Account AccountSettings `json:"account"`
}

type Tag struct {
Uid string `json:"uid"`
DType string `json:"dgraph.type"`
Label Label `json:"label"`
}

type User struct {
Uid string `json:"uid"`
DType string `json:"dgraph.type"`
Settings Settings `json:"settings"`
Tags []Tag `json:"tags"`
}

然后您创建一个用户并将其添加到您的Dgraph数据库中
user = User{
DType: "User",
Settings: Settings{
DType: "Settings",
Account: SettingsAccount{
DType: "SettingsAccount",
Name: "Billy Bob"
Username: "billyboy123"
},
Tags: []Tag{{
DType: "Tag",
Label: "admin"
}, {
DType: "Tag",
Label: "user"
}}
},
}

然后像这样查询Dgraph数据库(假设您具有用户节点的uid)
{
user(func: uid("0x1234")) {
uid
settings {
account {
name
username
}
}
tags {
label
}
}
}

响应将作为
{
"data": {
"user": [
{
"uid": "0x1234"
"settings": [
{
"account": [
{
"name": "Billy Bob",
"username": "billyboy123"
}
]
}
]
"tags": [
{
label: "admin"
},
{
label: "user"
},
]
}
]
}
}

因此,问题在于Dgraph的JSON响应将以数组形式返回结构类型的字段(大概是因为可能有多个节点指向一个其他节点),但是由于它是一个数组,因此您不能立即将其编码。 User结构(因为 User.Settings的类型为 Settings,而不是 []Settings)。

为了使用 User结构(或任何其他类型的结构)编码(marshal)Dgraph JSON响应,您会怎么做?

需要特别注意的是,JSON响应中的 settings数组应该只是该数组中的第一个元素,但是 tags数组仍应保持为数组,因为这是 User结构中指定的内容。

最佳答案

您可以按照以下说明使用自定义的Unmarshal进行此操作:

http://choly.ca/post/go-json-marshalling/

您可以通过将原始User嵌入匿名类型中来使用别名,该匿名类型中包含您的Umarshal像这样的Settings片段:

func (u *User) UnmarshalJSON(data []byte) error {
type Alias User
aux := &struct {
Settings []*Settings `json:"settings"`
*Alias
}{
Alias: (*Alias)(u),
}
if err := json.Unmarshal(data, &aux); err != nil {
return err
}
u.Settings = aux.Settings[0]
return nil
}

这里有一个完整的工作示例(您需要对 AccountSettings使用相同的技巧):

https://play.golang.org/p/FQWakX8B7OF

关于go - 如何将JSON响应中的特定数组值转换为只是数组中的第一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59432610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com