教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 Golang解析json数据之延迟解码

Golang解析json数据之延迟解码

发布时间:2021-12-12   编辑:jiaochengji.com
教程集为您提供Golang解析json数据之延迟解码等资源,欢迎您收藏本站,我们将为您提供最新的Golang解析json数据之延迟解码资源

 

 

<span id="OSC_h2_1"/> <h2>RawMessage类型</h2>

encoding/json的库中有这样一个类型:

RawMessage类型是一个保持原本编码的json对象。本类型实现了Marshaler和Unmarshaler接口,用于延迟json的解码或者预计算json的编码。

 

实际工作中,我们可能会遇到类型这种的json数据:

<pre><code class="lang-go hljs">package main import "encoding/json" // jsonText comes from http://json.org/example.html var jsonText = []byte(` { "glossary":{ "title":"example glossary", "GlossDiv":{ "title":"S", "GlossList":{ "GlossEntry":{ "ID":"SGML", "SortAs":"SGML", "GlossTerm":"Standard Generalized Markup Language", "Acronym":"SGML", "Abbrev":"ISO 8879:1986", "GlossDef":{ "para":"A meta-markup language, used to create markup languages such as DocBook.", "GlossSeeAlso":[ "GML", "XML" ] }, "GlossSee":"markup" } } } } }`) type glossary struct { Glossary struct { Title string `json:"title"` GlossDiv struct { Title string `json:"title"` GlossList struct { GlossEntry struct { ID string `json:"ID"` SortAs string `json:"SortAs"` GlossTerm string `json:"GlossTerm"` Acronym string `json:"Acronym"` Abbrev string `json:"Abbrev"` GlossDef struct { Para string `json:"para"` GlossSeeAlso []string `json:"GlossSeeAlso"` } `json:"GlossDef"` GlossSee string `json:"GlossSee"` } `json:"GlossEntry"` } `json:"GlossList"` } `json:"GlossDiv"` } `json:"glossary"` } func main() { var g glossary json.Unmarshal(jsonText, &g) }</code></code></pre>

写了半天的结构体类型, 却仅仅使用最外层的Title和 GlossDiv.Title,那么对于这种情况我们怎么做合适呢 ?

<pre><code class="lang-go hljs">package main import "encoding/json" // jsonText comes from http://json.org/example.html var jsonText = []byte(` { ... // 此处省略, 同上 }`) type glossarySectional struct { Glossary struct { Title string `json:"title"` GlossDiv struct { Title string `json:"title"` GlossList json.RawMessage `json:"GlossList"` // diff: delay JSON decoding } `json:"GlossDiv"` } `json:"glossary"` } func main() { var g glossarySectional json.Unmarshal(jsonText, &g) }</code></code></pre>

一目了然, RawMessage 起到了延迟解码一个 JSON 值的作用。

结论:

对于一些关乎性能的 JSON 解析的处理, 我们可以通过 json.RawMessage 进行性能的提升.

 

 


到此这篇关于“Golang解析json数据之延迟解码”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
Golang解析json数据之延迟解码
Golang中的defer关键字的用法、原理以及它的坑
Go Web编程--解析JSON请求和生成JSON响应
Go 中 defer 的 5 个坑 - 第一部分
golang json[]
golang bufio.newscanner如何超时跳出_贝壳找房小程序从PHP到Golang的跃迁之路
go 语言 生成json字符串数组
订阅redis接收的json字符串斜杠_用 Golang 实现基于 Redis 的安全高效 RPC 通信
MySQL延时复制库详细介绍
PHP接收post数据并解析json的简单实例

[关闭]
~ ~