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. springboot热部署JRebel插件

    激活参考:https://www.52pojie.cn/thread-906163-1-1.html 最后设置为离线,不然每次启动要重新激活 环境idea是2018.1.1版本 JRebel是最新版2 ...

  2. java jdk 8u191 官网下载地址

    目前jdk最后免费版本 jdk-8u191 下载地址: https://www.oracle.com/technetwork/java/javase/downloads/java-archive-ja ...

  3. 小程序重置index,重置item

    重置index,重置item <block wx:for="{{index_data.banner_list}}" wx:for-index="idx" ...

  4. vue+element+upload实现头像上传

    后台 @RequestMapping("/up") public JSONObject up(@RequestParam("picFile") Multipar ...

  5. ABP 基于DDD的.NET开发框架 学习(七)继承不同的service直接调用api的区别

    1.IApplicationService->IBaseService->具体IXXXService 具体XXXService->BaseService,具体IXXXService ...

  6. FireWolf OS X PE

    FireWolf OS X PE FireWolf OS X PE 9 使用手册   https://pe.firewolf.app/manual/ https://pe.firewolf.app/m ...

  7. 有状态的bean和无状态的bean的区别

    有状态会话bean :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”:一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束.即每个用户最初都会得到一个初 ...

  8. ToLua Timer机制

    从一个Bug说起: 在内部试玩时发现有个任务的玩家跟随Npc逻辑挂了. telnet连接到出问题的设备上, 开始搞事情 这个跟随的逻辑是一个Timer驱动的. 这个Timer在主角创建时就会启动. 一 ...

  9. 浅谈dubbo服务

    Dubbo分布式服 推荐大家一个画图工具:https://www.processon.com/i/572d51efe4b0c3c74981ec14 1.Dubbo是一个分布式服务框架,致力于提供高性能 ...

  10. docker-compose的一些服务一直是restarting

    1.查看日志 docker logs jenkins(镜像名字) 1.1 可能权限问题 1.2可能内存问题