关闭。这个问题需要details or clarity .它目前不接受答案。
想改进这个问题?通过 editing this post 添加详细信息并澄清问题.
2年前关闭。
Improve this question
我刚开始学围棋。
这是我需要解析的文件:
{
"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](类型 people 不支持索引)。
请帮我整理和打印这些人的名字,以及他们 child 的名字。
Alex
Mike
Rosa
Bob
Maria
最佳答案
使用 json.Decoder 可能是最简单的。您还需要记住,在使用不同键(例如您的示例中的“asd”、“fda”、“fg2”)解码 JSON 映射时,您应该使用映射,但对于固定键(“name”、“id”、 “年龄”)你应该使用结构。
这里有一些代码来说明Go Playground :
package main
import (
"encoding/json"
"fmt"
"strings"
)
type people struct {
People map[string]Person `json:"people"`
}
type Person struct {
Name string `json:"name"`
ID int `json:"id,omitempty"`
Sex string `json:"s,omitempty"`
Age int `json:"age,omitempty"`
Children []Person `json:"Childs,omitempty"`
}
func main() {
file, err := ioutil.ReadFile("./people.json")
if err != nil {
log.Fatalln("error:", err)
}
var data people
if err := json.NewDecoder(strings.NewReader(string(file))).Decode(&data); err == nil {
fmt.Println(data)
}
}
关于json - 请帮我弄清楚如何解析这个json文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61601436/