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. DHCP、DHCP Snooping及DHCP relay工作原理入门及实践(转)

    原文https://blog.51cto.com/5167020/2312718 序:DHCP服务相对简单,写本文的目的是为了讲一些DHCP安全方面的技术. 1.DHCP基础 DHCP 全称动态主机配 ...

  2. QT--学习疑惑探索

    用C++定义了一个类,并注册到qml文件中,但是这个类只能用Quickview进行显示,用其他方法好像不行. 启发: 1  window控件类是没有parent的widget. 2 m_view = ...

  3. AVR单片机教程——数字输入

    我们已经学习了如何使用按键和拨动开关,不知你有没有好奇 button_down 和 switch_status 等函数是如何实现的.本篇教程带你一探究竟,让我们从按键的原理开始. 在原理图中,按键的符 ...

  4. Linux的软连接、硬链接和find命令

    软链接和硬链接 序号 命令 作用 01 ln –s 被链接的源文件 链接文件 建立文件的软连接,用通俗的是方式类似于Windows下的快捷链接 源文件连接要是有绝对路径,不能使用相对路径,这样可以方便 ...

  5. Go语言( 运算符)

    运算符用于在程序运行时执行数学或逻辑运算. 运算符 Go 语言内置的运算符有: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 算数运算符 运算符 描述 + 相加 - 相减 * 相乘 / 相 ...

  6. spring boot 用@CONFIGURATIONPROPERTIES 和 @Configuration两种方法读取配置文件

    spring cloud  读取 配置文件属性值 1.bean @Data public class LocalFileConfig { /** * 文件存储地址 */ private String ...

  7. 集成maven和Spring boot的profile

    如果在配置中勾选了多套配置,则以pom.xml文件中 profiles中  配置 最后一个配置为准. maven中配置profile节点: <project> .... <profi ...

  8. TJOI2019

    TJOI出一堆模板题还玩一堆梗是什么鬼 甲苯先生的字符串(矩阵快速幂) 矩阵快速幂模板题 代码 甲苯先生的滚榜(树状数组.线段树) 最开始想平衡树搞,但是平衡树太难写了 一次答案的查询相当于查询比当前 ...

  9. Unity的学习笔记(向量点乘和叉乘)

    public class AngleTest : MonoBehaviour { public GameObject cube; //主要的物体 public GameObject radCube; ...

  10. 论文笔记:GREEDY FUNCTION APPROXIMATION: A GRADIENT BOOSTING MACHINE

    Boost是集成学习方法中的代表思想之一,核心的思想是不断的迭代.boost通常采用改变训练数据的概率分布,针对不同的训练数据分布调用弱学习算法学习一组弱分类器.在多次迭代的过程中,当前次迭代所用的训 ...