【发布时间】:2020-08-19 10:08:51
【问题描述】:
我刚开始学围棋。
这是我需要解析的文件:
{
"people": {
"asd": {
"name": "Alex",
"id": 0,
"s": "m"
},
"fda": {
"name": "Mike",
"id": 1,
"s": "m"
},
"fg2": {
"name": "Rosa",
"id": 3,
"s": "f",
"Childs" :
[
{
"name": "Bob",
"age": 1,
"s": "m"
},
{
"name": "Maria",
"age": 2,
"s": "f"
}
]
}
}
}
asd、fda、fg2 是由一组随机字符组成的某种标识符。
首先,我无法描述这个文件的结构,我被这些随机标识符弄糊涂了。
我这样做了:
type people {
People *map[string]interface{} `json:"people"`
}
所以我试图读取和解析这个文件,结果卡住了。 这是我的代码:
package main
import "encoding/json"
import "io/ioutil"
import "log"
import "fmt"
type people struct {
People map[string]interface{} `json:"people"`
}
func main() {
file, err := ioutil.ReadFile("./people.json")
if err != nil {
log.Println("error:", err)
}
var data people
err = json.Unmarshal([]byte(file), &data)
if err != nil {
log.Println("error:", err)
}
//fmt.Println(data.people)//
fmt.Println(data)
// for i := 0; i < len(data); i++ {//here the compiler throws error...
// fmt.Println("name: ", data[i].name)//#@!o_0
// }
}
错误是:无效操作:data[i](类型人不支持索引)。
请帮我整理一下,打印出这些人的名字,还有他们孩子的名字。
Alex
Mike
Rosa
Bob
Maria
【问题讨论】:
-
他的编译器抛出的错误比
#@!o_0更具描述性,并且会告诉你那里出了什么问题。data可能看起来很奇怪,因为您不需要指向映射的指针,结构本身是可寻址的。 -
@JimB 谢谢,我从结构描述中删除了“ * ”字符。错误是:无效操作:data[i](类型人不支持索引)。请告诉我如何使用这种结构...
-
你不能迭代
data或索引它,因为它是一个结构体,只有一个名为People的字段。 -
@JimB,你能告诉我如何描述这样一个文件的结构吗?
-
我不确定你的意思,这里展示的 javascript 是一个对象,它有一个名为
"people"的字段,所以这个结构可以工作。