2016-07-15 7 views
13

मैं प्रोटोबफ का उपयोग करने के लिए नया हूं, और सोच रहा था कि जावा में एक प्रोटोबफ स्ट्रीम/स्ट्रिंग में जेसन स्ट्रीम/स्ट्रिंग को कन्वर्ट करने का कोई आसान तरीका है या नहीं?जेसन से प्रोटोबफ में कैसे परिवर्तित करें?

उदाहरण के लिए,

protoString = convertToProto(jsonString) 

मैं एक json स्ट्रिंग है कि मैं एक Protobuf संदेश में पार्स करने के लिए चाहते हैं। इसलिए, मैं पहले जेसन स्ट्रिंग को प्रोटोबफ में परिवर्तित करना चाहता हूं, और उसके बाद Message.parseFrom() पर कॉल करना चाहता हूं।

मदद के लिए अग्रिम धन्यवाद!

+0

आप इसके बजाय [FlatBuffers] (https://google.github.io/flatbuffers/) पर एक नज़र डालना चाहते हैं। –

+1

"एक जेसन स्ट्रीम/स्ट्रिंग को प्रोटोबफ स्ट्रीम/स्ट्रिंग में कनवर्ट करने का एक आसान तरीका है?" शायद नहीं। वे अलग-अलग काम करते हैं; प्रोटोबफ फ़ील्ड वास्तव में धारावाहिक प्रतिनिधित्व में नामित नहीं हैं, लेकिन वे एक अनुक्रम में हैं। जेएसओएन लगभग विपरीत है; खेतों का नाम दिया जाता है, लेकिन अनुक्रम आमतौर पर कोई फर्क नहीं पड़ता। आप * क्या कर सकते हैं, अपने जेनरेट किए गए प्रोटोबफ कक्षाएं लेते हैं और जैक्सन मिक्सिन का उपयोग उन्हें एनोटेट करने और उन्हें पार्स करने के लिए करते हैं। –

उत्तर

8

प्रोटो 3 के साथ आप JsonFormat का उपयोग कर ऐसा कर सकते हैं। यह सीधे जेएसओएन प्रतिनिधित्व से पार्स करता है, इसलिए MyMessage.parseFrom(...) को अलग से कॉल करने की आवश्यकता नहीं है। इस तरह कुछ काम करना चाहिए:

JsonFormat.parser().merge(json_string, builder); 
+1

जब कोई मान अमान्य होता है (कहें प्रोटो बूलियन है, लेकिन जेसन मान पूर्णांक है), क्या उस क्षेत्र को अनदेखा करने के लिए पार्सर को कॉन्फ़िगर करने का कोई तरीका है या 'com.google.protobuf.InvalidProtocolBufferException' फेंकने के बजाय उस फ़ील्ड को शून्य पर सेट करना है। ? – the1plummie

संबंधित मुद्दे