Ich bin auf der Suche nach einer xpath like Abfragesprache für Protobuf-Nachrichten. Zum Beispiel für die Person unten gezeigten Meldung [vom Entwicklerführer entlehnt]xpath like Abfrage für Protobuf-Nachrichten
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;
}
Ich mag würde Methoden wie
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
Eine Möglichkeit haben, ist es, die Proto zu Json konvertieren und verwenden, um einen JsonPath/JsPath-APIs. Aber es kann teuer sein, vor allem für große Proto-Objekte immer wieder auf Json umzusteigen.
Jede Hilfe wird sehr geschätzt.
Danke, Irfan
Ich weiß nicht, ob dies bereits existiert, aber wenn nicht, können Sie dies in Bezug auf die Protobuf-Deskriptor und Reflexionsschnittstellen implementieren (nicht mit Java-Reflexion zu verwechseln - Protobuf Reflexion wird von der Protobuf-Bibliothek bereitgestellt). Siehe 'com.google.protobuf.Message' in Java oder' google :: protobuf :: Reflection' in C++. –
@Irfan - Wollte prüfen, ob Sie einen Weg gefunden haben, dies zu erreichen? Ich möchte JSON.NET (das JSONPath unterstützt) entfernen und ProtoBuf verwenden, aber fehlende Abfragemöglichkeiten stoppen mich. – Lalman
Wenn Sie Ihre Nachricht in Java-Bean konvertieren, können Sie [JXPath] (https://commons.apache.org/proper/commons-jxpath/users-guide.html) verwenden. –