golang-不固定格式的json
当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 使用钩子函数解决反序列化问题