Golang graphql遍历带有子图的地图

时间:2018-08-10 17:58:23

标签: arrays json go struct graphql

最近,我尝试使用GoLang作为Graphql服务器来实现Mutation Request,基本上,这是我发送的查询:如您所见,它包含一个对象数组,其中包含 name 字符串数组

mutation{
    CellTest(cells:[{name:"lero",child:["1","2"]},{name:"lero2",child:["12","22"]}]){
            querybody
    }
}

在我的Go代码中,我有一个类型对象,该对象将设置发送的值

type Cell struct {
    name  string   `json:"name"`
    child []string `json:"child"`
}

和一个将是[] Cell的自定义数组

type Cells []*Cell

但是,当GO收到请求时,我得到以下信息: 请注意,这是 cellsInterface

的打印
  

[map [child:[1 2] name:lero] map [child:[12 22] name:lero2]]

如何获取每个值并将其分配给我的数组单元格 像这样的东西:

  

Cells [0] = {name =“ first”,child = {“ 1”,“ 2”}}

     

Cells [1] = {name =“ second”,child = {“ hello”,“ good”}}

这是我目前的尝试:

var resolvedCells Cells
cellsInterface := params.Args["cells"].([]interface{})
cellsByte, err := json.Marshal(cellsInterface)
if err != nil {
    fmt.Println("marshal the input json", err)
    return resolvedCells, err
}

if err := json.Unmarshal(cellsByte, &resolvedCells); err != nil {
    fmt.Println("unmarshal the input json to Data.Cells", err)
    return resolvedCells, err
}

for cell := range resolvedCells {
    fmt.Println(cellsInterface[cell].([]interface{}))
}

但是,这只会将单元格数组分为0和1。

1 个答案:

答案 0 :(得分:1)

遍历结果中的映射值,并将这些值附加到“单元格”切片。如果要从json获取对象。然后您可以将字节解组到Cell中。

解组时的结果应为Cell结构的一部分

var resolvedCells []Cell
if err := json.Unmarshal(cellsByte, &resolvedCells); err != nil {
                fmt.Println("unmarshal the input json to Data.Cells", err)
    }
fmt.Println(resolvedCells)

Go playground上的工作代码

或者如果您想使用指针,则将循环遍历resolveCell

type Cells []*Cell

func main() {
    var resolvedCells Cells
    if err := json.Unmarshal(cellsByte, &resolvedCells); err != nil {
                    fmt.Println("unmarshal the input json to Data.Cells", err)
        }
    fmt.Println(*resolvedCells[1])
    for _, value := range resolvedCells{
        fmt.Println(value)
        fmt.Printf("%+v",value.Child) // access child struct value of array
    }
}

Playground example