我正在为protobuf消息寻找类似xpath的查询语言。例如,对于[从开发者指南中借用]下面显示的Person消息
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phone = 4;
}
我想要像
这样的方法XPBQuery.get(person, "$.id") ==> returns the id
XPBQuery.get(person, "$.name") ==> returns the name
XPBQuery.get(person, "$.phone.number[0]") ==> returns the first phone number
一种方法是将proto转换为Json并使用JsonPath / JsPath API。但是每次转换为Json可能都很昂贵,特别是对于大型Proto对象。
非常感谢任何帮助。
谢谢, 伊尔凡
答案 0 :(得分:1)
对protobuf v3的支持:https://github.com/google/protobuf/blob/4644f99d1af4250dec95339be6a13e149787ab33/src/google/protobuf/field_mask.proto
答案 1 :(得分:0)
在寻找类似问题的解决方案时,我发现:
PbQuery(python)
protobuf-utils(java)
protobuf-el(java)
(我没有使用这些库,因为我的目标语言是C ++,但希望这可以帮助其他人)
祝你好运!