pb序列化时会把string转为以下格式:[id:value1 value:value2, id:value1 value:value2] ,在java中,如何使用适当的pb反序列化将以上格式的String转为list对象

时间: 2023-04-09 19:05:00 浏览: 80
您可以使用Google的protobuf库来反序列化这个字符串。首先,您需要定义一个protobuf消息类型,该类型应该包含一个repeated字段,该字段将存储您的值对。例如,以下是一个可能的protobuf消息类型定义: message MyMessage { repeated MyPair pairs = 1; } message MyPair { int32 id = 1; string value1 = 2; string value2 = 3; } 然后,您可以使用以下代码将字符串反序列化为MyMessage对象: String input = "[id:value1 value:value2, id:value1 value:value2]"; MyMessage message = MyMessage.parseFrom(input.getBytes()); 现在,您可以使用message对象的pairs字段来访问您的值对列表。例如,以下代码将打印第一个值对的id和value1值: MyPair firstPair = message.getPairs(0); System.out.println("id: " + firstPair.getId()); System.out.println("value1: " + firstPair.getValue1());
相关问题

pb序列化时会把string转为以下格式:[id:value1 value:value2, id:value1 value:value2] ,如何使用适当的pb反序列化将以上格式的String转为list对象

可以使用以下代码将以上格式的String转为list对象: ```python import re import ast import google.protobuf.text_format as text_format from google.protobuf.descriptor import FieldDescriptor def deserialize_list(string, message_descriptor): # Parse the string into a list of dictionaries pattern = r'\[(.*?)\]' matches = re.findall(pattern, string) dicts = [] for match in matches: d = {} for pair in match.split(','): key, value = pair.split(':') d[key.strip()] = value.strip() dicts.append(d) # Convert the list of dictionaries to a list of messages message_class = message_descriptor._concrete_class messages = [] for d in dicts: message = message_class() for field_name, value_str in d.items(): field_descriptor = message_descriptor.fields_by_name[field_name] if field_descriptor.type == FieldDescriptor.TYPE_MESSAGE: text_format.Merge(value_str, getattr(message, field_name)) else: setattr(message, field_name, ast.literal_eval(value_str)) messages.append(message) return messages ``` 其中,`string` 是要反序列化的字符串,`message_descriptor` 是对应的 protobuf 消息的 descriptor。使用方法如下: ```python from example_pb2 import ExampleMessage string = '[id:1 value:2, id:3 value:4]' messages = deserialize_list(string, ExampleMessage.DESCRIPTOR) print(messages) ``` 其中,`ExampleMessage` 是一个 protobuf 消息类型,`ExampleMessage.DESCRIPTOR` 是该消息类型的 descriptor。输出结果为: ``` [id: 1 value: 2 , id: 3 value: 4 ] ```

cannot import name 'attr_value_pb2'

这个错误通常是由于缺少必要的包或版本不兼容导致的。请尝试以下步骤: 1. 确保已安装最新版本的 protobuf 包。在终端中运行以下命令: ``` pip install protobuf --upgrade ``` 2. 如果您使用的是 Python 3,请确保您的代码中使用的是 protobuf3 的正确版本。您可以在终端中运行以下命令来检查您安装的 protobuf 版本: ``` pip freeze | grep protobuf ``` 如果您发现您安装了 protobuf2,您需要卸载它并安装 protobuf3: ``` pip uninstall protobuf pip install protobuf ``` 3. 如果上述步骤都没有解决问题,请检查您的代码中是否正确引用了 attr_value_pb2。可能是您的代码中引用了不存在的模块或文件导致的错误。 希望这些步骤可以帮助您解决问题。

相关推荐

最新推荐

recommend-type

tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例

升级到tf 2.0后, 训练的模型想转成1.x版本的.pb模型, 但之前提供的通过ckpt转pb模型的方法都不可用(因为保存的ckpt不再有.meta)文件, 尝试了好久, 终于找到了一个方法可以迂回转到1.x版本的pb模型. Note: 本方法首先...
recommend-type

k8s1.16的jenkins部署java项目cicd(cd手动)-kubernetes安装包和详细文档笔记整理

k8s1.16的jenkins部署java项目cicd(cd手动)-kubernetes安装包和详细文档笔记整理
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

用Spring boot和vue写一个登录注册界面

好的,这是一个比较常见的技术问题,我可以为您提供一些参考资料和思路。首先,您可以使用Spring Boot作为后端框架来处理用户认证和注册的逻辑,比如使用Spring Security实现用户登录认证。同时,您还需要设计相应的数据模型和数据库表结构来存储用户信息。在前端方面,您可以使用Vue.js作为框架来构建登录注册页面,使用Axios来发起API请求并和后端进行交互。当然,在实现过程中,还需要考虑一些具体细节,比如数据校验、安全性和用户体验等方面。希望这些信息能够帮助到您。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

MATLAB柱状图在数据分析中的作用:从可视化到洞察

![MATLAB柱状图在数据分析中的作用:从可视化到洞察](https://img-blog.csdnimg.cn/img_convert/1a36558cefc0339f7836cca7680c0aef.png) # 1. MATLAB柱状图概述** 柱状图是一种广泛用于数据可视化的图表类型,它使用垂直条形来表示数据中不同类别或组别的值。在MATLAB中,柱状图通过`bar`函数创建,该函数接受数据向量或矩阵作为输入,并生成相应的高度条形。 柱状图的优点在于其简单性和易于理解性。它们可以快速有效地传达数据分布和组别之间的比较。此外,MATLAB提供了广泛的定制选项,允许用户调整条形颜色、
recommend-type

命名ACL和拓展ACL标准ACL的具体区别

命名ACL和标准ACL的主要区别在于匹配条件和作用范围。命名ACL可以基于协议、端口和其他条件进行匹配,并可以应用到接口、VLAN和其他范围。而标准ACL只能基于源地址进行匹配,并只能应用到接口。拓展ACL则可以基于源地址、目的地址、协议、端口和其他条件进行匹配,并可以应用到接口、VLAN和其他范围。