Golang实现结构体和Json格式数据之间的互相转换
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">摘要</a></li><li><a href="#_label1">1. 结构体到json格式</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_0">1.1 简单转换</a></li><li><a href="#_lab2_1_1">1.2 递归转换</a></li></ul><li><a href="#_label2">2. json格式到结构体</a></li><ul class="second_class_ul"><li><a href="#_lab2_2_2">2.1 简单转换</a></li><li><a href="#_lab2_2_3">2.2 嵌套JSON格式数据转换</a></li></ul></ul></div><p class="maodian"><a name="_label0"></a></p><h2>摘要</h2><p>本节主要学习Golang结构体和JSON序列化数据的转换命令。</p>
<p class="maodian"><a name="_label1"></a></p><h2>1. 结构体到json格式</h2>
<p class="maodian"><a name="_lab2_1_0"></a></p><h3>1.1 简单转换</h3>
<p>Golang结构体转换成JSON格式数据,主要在结构体的相关字段中加入<code>json : "keyword"</code>字段。具体做法如下:</p>
<div class="jb51code"><pre class="brush:go;">type Structname struct{
feild1 Type1 `json:"keyword1"`
feild2 Type2 `json:"keyword2"`
}
</pre></div>
<p>相关具体实例如下:</p>
<div class="jb51code"><pre class="brush:go;">package message
import (
"encoding/json"
"log"
"testing"
)
type Information struct{
Name string `json:"name"`
Addr string `json:"addr"`
}
func TestStructure(t *testing.T){
var inf Information
inf.Name="Alice"
inf.Addr="Green Street"
data,err:=json.Marshal(inf)
if err!=nil{
panic(err)
}
log.Println(string(data))
}
</pre></div>
<p class="maodian"><a name="_lab2_1_1"></a></p><h3>1.2 递归转换</h3>
<p>为了转换一个嵌套结构体为JSON格式文件,首先在需要转换的结构体中构建json:"keyword"字段,其次,构建一个嵌套的Golang结构体,最后利用Json.Marshal函数进行转换。</p>
<div class="jb51code"><pre class="brush:go;">package message
import (
"encoding/json"
"errors"
"log"
"testing"
)
type Employee struct {
Position string `json:"position"`
Name Name `json:"name"`
}
type Name struct {
FirstName string `json:"firstname"`
Surname string `json:"surname"`
}
func TestStructure(t *testing.T){
name:=Name{FirstName:"Zhang",Surname:"san"}
employee:=Employee{Position:"China",Name: name}
person,err:=json.Marshal(employee)
if err!=nil{
panic(errors.New("Wrong Converting behavior"))
}
log.Println(string(person))
}
</pre></div>
<p class="maodian"><a name="_label2"></a></p><h2>2. json格式到结构体</h2>
<p class="maodian"><a name="_lab2_2_2"></a></p><h3>2.1 简单转换</h3>
<p>JSON格式数据转换为Golang结构体的过程,利用Json.Ummarshal函数进行转换,具体转换例子如下:</p>
<div class="jb51code"><pre class="brush:go;">package message
import (
"encoding/json"
"log"
"testing"
)
type Information struct{
Name string `json:"name"`
Addr string `json:"addr"`
}
func TestStructure(t *testing.T){
alice:="{\"name\":\"Alice\",\"addr\":\"Green Street\"}"
inf:=new(Information)
err:=json.Unmarshal([]byte(alice),inf)
if err!=nil{
panic(err)
}
log.Println(inf)
}
</pre></div>
<p class="maodian"><a name="_lab2_2_3"></a></p><h3>2.2 嵌套JSON格式数据转换</h3>
<p>类似于嵌套结构体转换到JSON格式的过程,从JSON格式数据转换到嵌套结构体数据的过程,就是首先构建嵌套JSON格式数据,其次通过Json.Ummarshal函数转换为嵌套结构体数据。</p>
<div class="jb51code"><pre class="brush:go;">package message
import (
"encoding/json"
"log"
"testing"
)
type Employee struct {
Position string `json:"position"`
Name Name `json:"name"`
}
type Name struct {
FirstName string `json:"firstname"`
Surname string `json:"surname"`
}
func TestStructure(t *testing.T){
str:="{\"position\":\"China\",\"name\":{\"firstname\":\"Zhang\",\"surname\":\"san\"}}"
person1:=new(Employee)
json.Unmarshal([]byte(str),person1)
log.Println(person1,person1.Name)
}
</pre></div>
<p>以上就是JSon格式数据和Golang结构体之间的数据转换过程。</p>
頁:
[1]