使用一个例子说明golang如何访问和修改json文件;主要分三步:
-
<李>从文件读json串入李>
<李>把json串转变成golang对象李>
<李>遍历或者修改json值李>
<李>写回文件李>
假定用户输入json串为:
{ "用户":{ “mspid”:“管理”, “电子邮件”:“admin@domain.com” }, “节点”:[ { “名称”:“node1”, “位置”:“node1.domain.com: 8080” }, { “名称”:“node2”, “位置”:“node2.domain.com: 8080” } ] } >之前我们的目标是把node1和node2域的位置换掉。
代码如下
导入( “fmt” “io/ioutil” “编码/json” ) func HandleJson错误(jsonFile字符串,输出文件字符串){//从jsonFile读取json缓冲区 byteValue犯错:=ioutil.ReadFile (jsonFile) 如果犯错!=nil { 返回错 }//我们知道外json对象是一个地图,所以我们定义结果地图。//否则,结果可能被定义为片如果外是一个数组 var结果map [string]接口{} 呃=json。Unmarshal (byteValue,及结果) 如果犯错!=nil { 返回错 }//处理同行 节点:=结果(“节点”)。([]接口{}) _,节点:={范围节点 m:=节点。(map [string]接口{}) 如果名字,存在:=m(“名字”);存在{ 如果名字==皀ode1”{ 米(“位置”)=" new-value1 " 其他}如果name==皀ode2”{ 米(“位置”)=" new-value2 " } } }//golang对象转换回字节 byteValue呃=json.Marshal(结果) 如果犯错!=nil { 返回错 }//写回文件 呃=ioutil。byteValue WriteFile(输出文件,0644) 返回错 } >之前这个地方主要用的是golang{}的接口数据类型,然后把接口{}转换成真正的数据类型。
这个函数可以扩充成动态的解析任何类型,只要把所有的类型全部定义成接口{},然后使用动态类型检测就可以知道每一个具体元素的类型了,最终达到类型金桥的功能,访问和修改json文件。
var x接口{}=? 开关x。(类型){ 例零: fmt。Println (x=nil) 案例int: fmt。Println (int x) 案例bool: fmt。Println (“x是bool”) 案例字符串: fmt。Println (“x是字符串”) 案例[]接口{}: fmt。Println (x片) 情况下map [string]接口{}: fmt。Println (“x是地图”) 默认值: fmt。Println(“类型未知”) } } >之前 PS:<强> 强>据说json-iteator是目前golang中对json格式数据处理最快的包(比官方json包快6倍),好像是滴滴团队开源的,使用起来也非常方便,有兴趣的可以学习学习、下面我们看看官方的示例代码,使用起来也是很方便
主要包 进口"github.com/json-iterator/go” 用户类型结构{ 名称字符串 年龄int8 } 函数main () { 用户:用户={ 名称:“塘沽”, 年龄:18岁 } var jsoniter=jsoniter.ConfigCompatibleWithStandardLibrary//序列化 数据,犯错:=jsoniter.Marshal(和用户) 如果犯错!=nil { log.Fatal (err) } fmt.Println(字符串(数据))//反序列化 var人用户 呃=jsoniter。Unmarshal(数据,和人) 如果犯错!=nil { log.Fatal (err) } fmt.Println(人) }以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
golang如何修改json文件内容的方法示例