簡體   English   中英

如何將字符串解析為結構體並寫入文件

[英]how to parse string to go struct and write to file

我想解析字符串中的學校數組,並想使用 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

我該怎么做? 我的錯誤在哪里?

我發現了以下兩個問題:

  1. 你已經通過了type []struct { Location string Year int }而不是[]byte type []struct { Location string Year int } u.Schools
  2. 此外,您的 json 數據仍然無效。

所以這是我的解決方案。 由於您沒有提供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))
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM