Golang解析json数据之延迟解码
2018-04-18 10:51
543 查看
RawMessage类型
encoding/json的库中有这样一个类型:RawMessage类型是一个保持原本编码的json对象。本类型实现了Marshaler和Unmarshaler接口,用于延迟json的解码或者预计算json的编码。
实际工作中,我们可能会遇到类型这种的json数据:
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) }
写了半天的结构体类型, 却仅仅使用最外层的Title和 GlossDiv.Title,那么对于这种情况我们怎么做合适呢 ?
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) }
一目了然, RawMessage 起到了延迟解码一个 JSON 值的作用。
结论:
对于一些关乎性能的 JSON 解析的处理, 我们可以通过 json.RawMessage 进行性能的提升.
相关文章推荐
- golang beego接受post json字符串解析返回JSON数据
- golang 数据建模json解析
- 利用Golang解析json数据的方法示例
- golang解析json格式数据
- Qt 之 QJsonDocument 解析json 数据
- Flex与servlet交互2(数据的解析Json)
- gson解析json数据格式为object对象
- FastJson和Gson和Json数据解析分析和用法
- Android中复杂Json数据的解析
- iOS中的数据解析(XML,JSON),SAX解析,DOM解析
- Window Phone 7 解析 Json 数据
- json_ajax提交json格式数据到servlet并解析
- Jquery Ajax和getJSON获取后台普通Json数据和层级Json数据解析
- Android数据格式解析对象JSON用法
- Java构造和解析Json数据的两种方法详解一
- JSON数据解析
- Gson解析第三方提供Json数据(天气预报,新闻等)
- C# 解析JSON格式数据
- S2SH+ajax+json-----jQuery中$.ajax解析xml、json格式数据
- 关于cocos2d-x用jsonbox解析数据