我想解析字符串中的schools数组,并想使用golang写入文件。 假设我有一个称为数据的字符串;
{
"name": "alex",
"schools": [
{"location": "xxx" , "year": 2012},
{"location": "xxx" , "year": 2012},
]
}
我想解析它并将学校写入文件。
为了达到目的。我首先将结构写为;
type User struct{
name string `json:"name"`
Schools []struct {
Location string
Year int
}
}
然后创建一个变量,然后尝试将字符串解析为
var u User
err := json.Unmarshal([]byte(data), &u)
_, err = createdFile.Write(u.Schools)
但这给我错误
cannot use m (type User) as type []byte in argument to createdFile.Write
我该怎么办?我的错误在哪里?
答案 0 :(得分:0)
我发现了以下两个问题:
u.Schools
中的type []struct { Location string Year int }
而不是[]byte
这是我的解决方案。由于您没有提供createdFile.Write()
详细信息,因此我在这里使用了ioutil
软件包。
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
)
var data = `{
"name": "alex",
"schools": [
{"location": "xxx" , "year": 2012},
{"location": "xxx" , "year": 2012}
]
}`
type User struct {
Name string `json:"name"`
Schools []struct {
Location string
Year int
}
}
func main() {
var (
u User
err error
schoolsBytes []byte
)
if err = json.Unmarshal([]byte(data), &u); err != nil {
log.Fatalln(err)
}
fmt.Println(u.Schools)
schoolsBytes, err = json.Marshal(u.Schools)
if err != nil {
log.Fatalln(err)
}
err = ioutil.WriteFile("/tmp/dat1", schoolsBytes, 0777)
if err != nil {
log.Fatalln(err)
}
dat, err := ioutil.ReadFile("/tmp/dat1")
if err != nil {
log.Fatalln(err)
}
fmt.Print(string(dat))
}