【Go语言】golang读写JSON文件

简单介绍golang对JSON文件的读写操作

JSON,JavaScript Object Notation,一种轻量级的数据交换格式,常用来在网络中传递数据,和XML是一种类型的功能。JSON 语法是 JavaScript 语法的子集。具体的用法不是我的重点:如果你不知道什么是JSON的语法,右键百度一下就好了。如果想校验自己的JSON格式的文件是否正确,下面这个网站是你很好的选择:http://www.bejson.com/  值得放入收藏夹哦!
下面上代码:

 type User struct {
 Name string
 Tel string
 Age string
 }

type Info struct {
 Id string
 User []*User
 Collage string
 }
 

现在编码

func marshalJSON() []byte {
user1 := &User{"刘凯宁", "15200806084", "21"}
user2 := &User{"lkn", "13244398812", "12"}
info := Info{"0010", []*User{user1, user2}, "中南大学"}
info_json, _ := json.Marshal(info)
//fmt.Printf("JSON格式:%s", info_json)
file, _ := os.OpenFile("info.json", os.O_CREATE|os.O_WRONLY, 0)
defer file.Close()
ioutil.WriteFile("info.json", info_json, 0x644)
return info_json
}

使用方式:自己构造好struct 然后就可以编码了,照着例子看应该不难。要注意的是,编码的时候只能对struct所有能导出的属性进行编码,就是说大写的属性,小写的属性是不导出的,这个要一定注意

现在解码

func unmarshalJSON(data_JSON []byte) {
data := make(map[string]interface{})
err := json.Unmarshal(data_JSON, &data)
checkError(err)
//data_map := data.(map[string]interface{})
for k, v := range data {
switch valueType := v.(type) {
case string:
fmt.Println(k, "is string", valueType)
case int:
fmt.Println(k, "is int", valueType)
case []interface{}:
fmt.Println(k, "is array:")
for k, u := range valueType {
fmt.Println("k=:", k, " v=:", u)
}
default:
fmt.Println(k, "is a type that I don't know")
}
}
}

使用方式,先读出来文件,生成byte数组,然后去解码就可以了。可以解析位置结构的JSON,你可以随便找几个json文件去试一下啦!

最后附一个复制文件的函数:

//复制文件
func copyFile(sourceFile, resultFile string) {
//source文件
source, err := os.Open(sourceFile)
checkError(err)
defer source.Close()
//复制的文件
result, err := os.OpenFile(resultFile, os.O_WRONLY|os.O_CREATE, 0644)
checkError(err)
defer result.Close()
//复制
io.Copy(result, source)
fmt.Println("复制成功!")

}

刘凯宁@C2P
20140801

Share

【Go语言】golang读写JSON文件》上有 2 条评论

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*


*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>