4.5 JSON

JavaScript对象表示法(JSON)是一种发送和接收格式化信息的标准。JSON不是唯一的标准,XML(见7.14节)、ASN.1和Google的Protocol Buffer都是相似的标准,各自有适用的场景。但是因为JSON的简单、可读性强并且支持广泛,所以使用得最多。

Go通过标准库encoding/json、encoding.xml、encoding/asn1和其他的库对这些格式的编码和解码提供了非常好的支持,这些库都拥有相同的API。本节对使用最多的encoding/json做一个简要的描述。

JSON是JavaScript值的Unicode编码,这些值包括字符串、数字、布尔值、数组和对象。JSON是基本数据类型和复合数据类型的一种高效的、可读性强的表示方法。第3章讲解了基础数据类型,本章讲解了复合数据类型——数组、slice、结构体和map。

JSON最基本的类型是数字(以十进制或者科学计数法表示)、布尔值(true或false)和字符串。字符串是用双引号括起来的Unicode代码点的序列,使用反斜杠作为转义字符,通过和Go类似的方式访问成员。当然,JSON里面的\uhhh数字转义得到的是UTF-16编码,而不是Go里面的字符。

这些基础类型可以通过JSON的数组和对象进行组合。JSON的数组是一个有序的元素序列,每个元素之间用逗号分隔,两边使用方括号括起来。JSON的数组用来编码Go里面的数组和slice。JSON的对象是一个从字符串到值的映射,写成name:value对的序列,每个元素之间用逗号分隔,两边使用花括号括起来。JSON的对象用来编码Go里面的map(键为字符串类型)和结构体。例如:

想象一个程序需要收集电影的观看次数并提供推荐。这个程序的Movie类型和典型的元素列表都在下面提供了。(结构体中成员Year和Color后面的字符串字面量是成员的标签,稍后会讲解它。) ...

Get Go程序设计语言 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.