2015-02-13 16 views
5

Tôi đang tìm kiếm ngôn ngữ truy vấn giống như xpath cho các thư protobuf. Ví dụ, đối với thông điệp Person hình dưới đây [mượn từ hướng dẫn cho nhà phát triển]xpath giống như truy vấn cho các thư protobuf

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; 
} 

Tôi muốn có phương pháp như

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 

Một cách là để chuyển đổi các proto để Json và sử dụng một JsonPath/API của JsPath. Nhưng nó có thể tốn kém để chuyển đổi sang Json mọi lúc, đặc biệt là đối với các đối tượng Proto lớn.

Bất kỳ trợ giúp nào được đánh giá cao.

Cảm ơn, Irfan

+0

Tôi không biết nếu điều này đã tồn tại, nhưng nếu không bạn có thể thực hiện điều này về giao diện mô tả và phản chiếu Protobuf (không bị nhầm lẫn với phản xạ Java - Phản xạ Protobuf được cung cấp bởi thư viện Protobuf). Xem 'com.google.protobuf.Message' trong Java hoặc' google :: protobuf :: Reflection' trong C++. –

+0

@Irfan - Bạn muốn kiểm tra xem bạn có tìm ra cách để đạt được điều này không? Tôi muốn đưa ra JSON.NET (có hỗ trợ JSONPath) và sử dụng ProtoBuf, nhưng thiếu khả năng truy vấn dừng lại tôi. – Lalman

+0

Nếu bạn chuyển đổi thư của mình thành hạt java thì bạn có thể sử dụng [JXPath] (https://commons.apache.org/proper/commons-jxpath/users-guide.html) –

Trả lời

0

Trong khi tìm kiếm một giải pháp cho một vấn đề tương tự tôi phát hiện ra:

(Tôi không sử dụng các thư viện như là ngôn ngữ mục tiêu của tôi là C++, nhưng hy vọng điều này có thể giúp đỡ người khác)

Chúc may mắn!

Các vấn đề liên quan