2015-02-13 9 views
5

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

+0

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++. –

+0

@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

+0

Wenn Sie Ihre Nachricht in Java-Bean konvertieren, können Sie [JXPath] (https://commons.apache.org/proper/commons-jxpath/users-guide.html) verwenden. –

Antwort

0

Während nach einer Lösung für ein ähnliches Problem der Suche entdeckte ich:

(ich diese Bibliotheken nicht als meine Zielsprache C++, verwendet haben hoffen aber jemand anderes helfen könnte)

Viel Glück!