教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 golang-不固定格式的json

golang-不固定格式的json

发布时间:2022-03-12   编辑:jiaochengji.com
教程集为您提供golang-不固定格式的json等资源,欢迎您收藏本站,我们将为您提供最新的golang-不固定格式的json资源
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"/></svg>

当json字符串没有固定格式时,反序列化不好定义与其相对应的结构体,此时应使用json.RawMessage将原始字节数据保存下来,再做进一步解析。json.RawMessage其实是[]byte的声明。如:

<pre><code class="lang-go hljs"><span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token punctuation">(</span> <span class="token string">"encoding/json"</span> <span class="token string">"fmt"</span> <span class="token punctuation">)</span> <span class="token keyword">type</span> Student <span class="token keyword">struct</span> <span class="token punctuation">{</span> Name <span class="token builtin">string</span> <span class="token string">`json:"name"`</span> Age <span class="token builtin">int</span> <span class="token string">`json:"age,string"`</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> schoolStr <span class="token operator">:=</span> <span class="token string">`{"student":{"name":"jack","age":"20"},"teacher":"lucy"}`</span> <span class="token keyword">var</span> result <span class="token keyword">map</span><span class="token punctuation">[</span><span class="token builtin">string</span><span class="token punctuation">]</span>json<span class="token punctuation">.</span>RawMessage <span class="token keyword">if</span> err <span class="token operator">:=</span> json<span class="token punctuation">.</span><span class="token function">Unmarshal</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token function">byte</span><span class="token punctuation">(</span>schoolStr<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token operator">&</span>result<span class="token punctuation">)</span><span class="token punctuation">;</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"json.Unmarshal schoolStr err: %v\n"</span><span class="token punctuation">,</span> err<span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token punctuation">}</span> <span class="token keyword">var</span> s Student <span class="token keyword">if</span> err <span class="token operator">:=</span> json<span class="token punctuation">.</span><span class="token function">Unmarshal</span><span class="token punctuation">(</span>result<span class="token punctuation">[</span><span class="token string">"student"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token operator">&</span>s<span class="token punctuation">)</span><span class="token punctuation">;</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"json.Unmarshal result['student' err: %v\n]"</span><span class="token punctuation">,</span> err<span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token punctuation">}</span> fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"s: %#v\n"</span><span class="token punctuation">,</span> s<span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"s.Age type: %T\n"</span><span class="token punctuation">,</span> s<span class="token punctuation">.</span>Age<span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre>

输出:

<pre><code class="lang-go hljs">s<span class="token punctuation">:</span> main<span class="token punctuation">.</span>Student<span class="token punctuation">{</span>Name<span class="token punctuation">:</span><span class="token string">"jack"</span><span class="token punctuation">,</span> Age<span class="token punctuation">:</span><span class="token number">20</span><span class="token punctuation">}</span> s<span class="token punctuation">.</span>Age <span class="token keyword">type</span><span class="token punctuation">:</span> <span class="token builtin">int</span> </code></pre> 到此这篇关于“golang-不固定格式的json”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
处理json数据的原理_3分钟微文档:Go语言解析Json文件,你值得收藏
Go 学习笔记 09 | Golang 结构体与 JSON 互相转换
golang结构体tag的使用
golang json[]
Go语言中struct内部的反引号
Golang中JSON的使用
jquery中ajax调用json数据的使用说明
golang 自定义json解析
Gin 框架绑定 JSON 参数使用 jsoniter
gorm time.Time 使用钩子函数解决反序列化问题

[关闭]
~ ~