0

(注、この問題には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構造体 (またはその他の種類の構造体) を使用して Dgraph JSON 応答をマーシャリングするにはどうしますか?

settingsJSON 応答の配列は、その配列の最初の要素であるtags必要がありますが、構造体で指定されているため、配列は配列のままである必要があることに注意することが重要Userです。

4

1 に答える 1