Protobuf3 JSON映射

proto 3支持JSON中的规范编码,使得系统之间更容易共享数据。下表按类型对编码进行了描述。

如果JSON编码的数据中缺少一个值,或者如果它的值为null,那么当解析到协议缓冲区时,它将被解释为合适的默认值。如果某个字段在协议缓冲区中具有默认值,则默认情况下,在JSON编码的数据中会省略该字段,以节省空间,可以提供选项来在 JSON-encoded的输出中发送具有默认值的字段。

proto3 JSON JSON实例 说明
message object {"fooBar": v, "g": null, …} 生成JSON对象。消息字段名映射到lowerCamelCase,成为JSON对象键。如果指定了JSON_name字段选项,则指定的值将被用作密钥。解析器接受lowerCamelCase名称(或JSON_name选项指定的名称)和原始的原域名称。null是所有字段类型的接受值,并被视为相应字段类型的默认值。
enum string "FOO_BAR" 使用proto中指定的枚举值的名称。
map<K,V> object {"k": v, …} 所有键都转换为字符串。
repeated V array [v, …] null被接受为空列表[]。
bool true, false true, false  
string string "Hello World!"  
bytes base64 string "YWJjMTIzIT8kKiYoKSctPUB+" JSON值使用标准base64编码和paddings编码作为字符串编码的数据。
int32, fixed32, uint32 number 1, -10, 0 JSON值将是十进制数。接受数字或字符串。
int64, fixed64, uint64 string "1", "-10" JSON值将是十进制数。接受数字或字符串。
float, double number 1.1, -10.0, 0, "NaN", "Infinity" JSON值将是一个数字或特殊字符串值“NaN”、“Infinity”和“-Infinity”之一。接受数字或字符串。指数记数法也被接受。
Any object {"@type": "url", "f": v, … } 如果Any包含具有特殊JSON映射的值,它将被转换如下: {“@ type”: XXX,“value”: yyy }。否则,该值将被转换成JSON对象,并且“@ type”字段将被插入以指示实际的数据类型。
Timestamp string "1972-01-01T10:00:20.021Z" 使用RFC 3339,其中生成的输出总是Z归一化的,并使用0、3、6或9个小数位数。除“Z”之外的偏移也是可以接受的。
Duration string "1.000340012s", "1s" 根据所需精度,生成的输出总是包含0、3、6或9个小数位数,后跟后缀“s”。接受任何小数位数(也没有),只要它们符合毫微秒精度,并且后缀“s”是必需的。
Struct object { … } 任何JSON对象都可以。
Wrapper types various types 2, "2", "foo", true, "true", null, 0, … 包装器在JSON中使用与包装基元类型相同的表示,只是在数据转换和传输期间允许并保留null。
FieldMask string "f.fooBar,h" 请参见字段mask.proto
ListValue array [foo, bar, …]  
Value value    
NullValue null JSON null  

JSON可选项

proto 3 JSON实现可能提供以下选项:

默认情况下,在proto 3 JSON输出中省略具有默认值的字段。实现可以提供一个选项来用默认值覆盖这个行为和输出字段。

忽略未知字段:默认情况下,proto3 JSON解析器拒绝未知字段,但可以通过指定在解析中忽略未知字段的选项。

使用proto域名而不是lowerCamelCase名称:默认情况下,proto 3 JSON会将域名转换为lowerCamelCase,并将其用作JSON名称。可以指定一个选项来使用proto字段名作为JSON名称。proto3 JSON解析器需要接受转换后的lowerCamelCase名称和proto字段名。

将枚举值作为整数而不是字符串发出:默认情况下,在JSON输出中使用枚举值的名称。可以提供一个选项来代替使用枚举值的数值。

十.Protobuf3 JSON映射的更多相关文章

  1. Json 映射 的使用 及 JS 数组的使用

    Json 映射的使用: var nameMap = { 'A': 'A1', 'B': 'B1', 'B': 'B1' }; var selectedName='A'; if (nameMap[sel ...

  2. 将JSON映射为实体对象(iOS篇)

    将JSON映射为实体对象(iOS篇) iOS开发人员已经习惯于将JSON转换为字典或者数组来进行操作了,接下来我要做的事情,可能匪夷所思,但是,对WP和Android开发人员而言,他们更倾向于将JSO ...

  3. [Swift通天遁地]四、网络和线程-(11)将服务器返回的JSON映射为实例对象

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  4. Language Guide (proto3) | proto3 语言指南(十三)JSON映射

    JSON Mapping - JSON映射 Proto3支持JSON中的规范编码,使得在系统之间共享数据更加容易.下表按类型对编码进行了描述. 如果JSON编码的数据中缺少一个值或者它的值为null, ...

  5. 无线客户端框架设计(5.1):将JSON映射为实体对象(iOS篇)

    iOS开发人员已经习惯于将JSON转换为字典或者数组来进行操作了,接下来我要做的事情,可能匪夷所思,但是,对WP和Android开发人员而言,他们更倾向于将JSON转换为实体对象进行操作. 我所设计的 ...

  6. Json映射为Map,避免定义过多pojo类

    我们在开发过程中经常会遇到解析Json字符串的情况,这时候采用开源工具可以快速将json字符串映射为pojo对象.而在某些业务场景中,往往为了获得json字符串中某个属性的值而不得不定义一个pojo类 ...

  7. VB将JSON映射到表格实现解析

    现在抓取网页数据的时候,经常会遇到JSON的数据,相对于繁杂无标签名的HTML源,用JSON传回的数据比较直观好看点.但是从其中提炼数据也让人觉得很烦躁,基本上就是不断的查找,截取,或者组装成JS代码 ...

  8. Struts2(十六)Json

    一.JSON Json就是浏览器和服务器之间交换数据的一种轻量级对象 javaSctipt中类似的对象操作 $(function() { var person = { "name" ...

  9. Java开发笔记(六十六)映射:HashMap和TreeMap

    前面介绍了两种集合的用法,它们的共性为每个元素都是唯一的,区别在于一个无序一个有序.虽说往集合里面保存数据还算容易,但要从集合中取出数据就没那么方便了,因为集合居然不提供get方法,没有get方法怎么 ...

随机推荐

  1. Navicat 8 For Mysql 数据库的导出与加载

    方便断断续续的数据库实验课,避免每次都要重新写入数据,可使用Navicat的数据库导出功能 数据库的导出 1.选择要导出的数据库,右键点击“转存SQL文件”选项. 2.填写文件名字,选择位置,点击“保 ...

  2. 讲解JavaScript中对闭包的理解

    1.JS中变量的作用域 在理解闭包之前,我们得弄清楚JS中变量的作用域原理,它分为全局作用域和局部作用域,它有一个特点就是局部可以获取全局的声明变量,而全局却不能得到局部声明的变量,我们先来看一个小例 ...

  3. MySQL数据库去重 SQL解决

    MySQL数据库去重的方法 ​ 数据库最近有很多重复的数据,数据量还有点大,本想着用代码解决,后来发现用SQL就能解决,这里记录一下 看这条SQL DELETE consum_record FROM ...

  4. c++基础(五)——关联容器

    1.关联容器 关联容器中的元素时按照关键字来保存和访问的,与之相对的,顺序容器中的元素时按它们在容器中的位置来顺序保存和访问的.两个主要关联容器是 map 和 set.标准库提供了8个关联容器,这8个 ...

  5. php将二维数组转换成我想要的一维数组

    使用方法array_column($array,b,$arr): 参数说明:$array是我们原始的二维数组,B是我们想要的values,c是key 举个栗子:这是我原来的二维数组 这是我需要的一维数 ...

  6. mysql中sum与if,case when 结合使用

    1.sum与if结合使用 如图:数据表中,count_money 字段可为正,可为负.为正表示收入,负表示支出. 统计总收入,总支出. select sum(if(count_money > 0 ...

  7. NGINX 配置本地HTTPS(双向认证)

    一.SSL协议加密方式 SSL协议即用到了对称加密也用到了非对称加密(公钥加密),在建立传输链路时,SSL首先对对称加密的密钥使用公钥进行非对称加密,链路建立好之后,SSL对传输内容使用对称加密. 1 ...

  8. VirtualBox导入OVA文件文档教程

    1 2 修改框住的路径,最好不要在C盘 3 取消检查更新 4 5 6 7 8 9 10 11 等待加载完成:加载完成后 OVA文件导入成功 作者:含笑半步颠√ 博客链接:https://www.cnb ...

  9. THUSC2019:Illusory World

    拿了1=就来更 Update:没约咕了

  10. Navicat premium工具转储数据表的结构时,datatime字段报错

    Navicat premium工具导出数据库: Navicat premium工具导入数据库: 运行SQL文件,遇到的错误,红色下划线提示,发现:(SQL文件的时间有问题) 不是insert语句有问题 ...