golang学习----JSON文件操作

golang操作JSON文件

JSON 做为一种重要的数据格式,在如今的web开发中越来越重要。 在golang中我们可以使用json包中的方法来操作json格式的文件。

生成JSON数据

    json := make(map[string]interface{})
    json["name"] = "Gopher"
    json["title"] = "programmer"
    json["contact"] = map[string]interface{}{
        "home": "415.333.3333",
        "cell": "415.555.5555",
    }
    //  缩进json(格式化)
    //  若使用Marshal则不会格式化,这样不方便阅读
    bytes, err := json.MarshalIndent(json, "", " ")
    if err != nil{
        log.Println("ERROR:",err)
    }
    fmt.Println(string(bytes))

读取JSON数据

这里我们使用从文件中获取的JSON

//  读取文件中的数据
func readJson(filePath string) (result string){
    file, err := os.Open(filePath)
    defer file.Close()
    if err != nil {
        fmt.Println("ERROR:", err)
    }
    buf := bufio.NewReader(file)
    for {
        s, err := buf.ReadString('\n')
        result += s
        if err != nil {
            if err == io.EOF{
                fmt.Println("Read is ok")
                break
            }else{
                fmt.Println("ERROR:", err)
                return
            }
        }
    }
    return result
}


func main() {
    var data struct{
        Id int
        Customerld int
        Raised string
        Due string
        Paid bool
        Note string
        Items []struct{
            Id string
            Price float64
            Quantity int
            Note string
        }
    }
    result := readJson("F:\\GolangProject\\io\\file_option\\json\\json.json")
    err := json.Unmarshal([]byte(result), &data)
    if err != nil {
        fmt.Println("ERROR:",err)
    }
    fmt.Println(data)
}

PS:以上注意构造的对象的参数首字母必须大写,否则JSON数据是不会添加到结构体中去。

猜你喜欢

转载自www.cnblogs.com/bananafish/p/11923448.html