嵌入式JSON结构

时间:2015-11-18 10:14:57

标签: json mongodb go

这是我的结构

    type studentData struct {
        Name  string `bson:"name"`
        Grade int    `bson:"Grade"`
    }

    type student struct {
        student []studentData `json:"student"`
    }

我需要像这样的JSON结果

{
  "array": [
    {
      "Name": "ethan",
      "Grade": 2
    },
    {
      "Name": "rangga",
      "Grade": 2
    }
  ]
}

我从mongoDB获取数据,已经尝试搜索但是没有发现我需要,有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

虽然您的JSON没有多大意义,但这会输出您想要的确切JSON:

package main

import (
    "encoding/json"
    "os"
)

type Student struct {
    Name  string `json:"name"`
    Grade int    `json:"Grade"`
}

type Students struct {
    Array []Student `json:"array"`
}

func main() {

    student1 := Student{
        Name: "Josh",
        Grade: 2,
    }

    student2 := Student{
        Name: "Sarah",
        Grade: 4,
    }

    students := Students{
        Array: []Student{student1, student2},
    }

    b, err := json.Marshal(students)
    if err != nil {
        panic(err)
    }

    os.Stdout.Write(b)
}

尝试此处的代码https://play.golang.org/p/PcPZOuxJUM

答案 1 :(得分:0)

要使encoding/json能够封送您的结构,它需要查看您希望它序列化的字段。 在您的情况下,student.student未导出,因此encoding/json不可见。导出它并且有效:

type student struct {
    Student []studentData `json:"student"`
}

旁边的注释:使用“#34;学生”之外的其他内容。对于名为" student"的结构中的[]studentData类型的字段。也许像" Grades"或者" TranscriptInformation"?

旁边的另一个注意事项:您所需的JSON不是"对",标识符/键不应大写,即"Name"应为"name"

此外,搜索[go] embedded json时出现了this;)

等问题