2015-01-27 10 views
6

मेरे पास एक JSON दस्तावेज़ है जिसे मैं एवरो में परिवर्तित करना चाहता हूं और उस उद्देश्य के लिए निर्दिष्ट स्कीमा की आवश्यकता है।जटिल जेसन दस्तावेज़ के लिए एवरो स्कीमा को कैसे परिभाषित किया जाए?

{ 
"uid": 29153333, 
"somefield": "somevalue", 
"options": [ 
    { 
    "item1_lvl2": "a", 
    "item2_lvl2": [ 
     { 
     "item1_lvl3": "x1", 
     "item2_lvl3": "y1" 
     }, 
     { 
     "item1_lvl3": "x2", 
     "item2_lvl3": "y2" 
     } 
    ] 
    } 
] 
} 

मैं गैर जटिल प्रकार के लिए लेकिन क्षेत्र जटिल "विकल्प" के लिए नहीं स्कीमा परिभाषित करने में सक्षम हूँ:

यहाँ JSON दस्तावेज़ जिसके लिए मैं एवरो स्कीमा निर्धारित करना चाहते हैं
{ 
    "namespace" : "my.com.ns", 
    "type" : "record", 
    "fields" : [ 
    {"name": "uid", "type": "int"}, 
    {"name": "somefield", "type": "string"} 
    {"name": "options", "type": .....} 
    ] 
} 

सहायता के लिए धन्यवाद!

उत्तर

10

आपको एवरो complex types, विशेष रूप से arrays और records का उपयोग करने की आवश्यकता है। और फिर घोंसला इन एक साथ:

{ 
    "namespace" : "my.com.ns", 
    "name": "myrecord", 
    "type" : "record", 
    "fields" : [ 
    {"name": "uid", "type": "int"}, 
    {"name": "somefield", "type": "string"}, 
    {"name": "options", "type": { 
     "type": "array", 
     "items": { 
      "type": "record", 
      "name": "lvl2_record", 
      "fields": [ 
       {"name": "item1_lvl2", "type": "string"}, 
       {"name": "item2_lvl2", "type": { 
        "type": "array", 
        "items": { 
         "type": "record", 
         "name": "lvl3_record", 
         "fields": [ 
          {"name": "item1_lvl3", "type": "string"}, 
          {"name": "item2_lvl3", "type": "string"} 
         ] 
        } 
       }} 
      ] 
     } 
    }} 
    ] 
} 

इसके अलावा, readiblity सुधार करने के लिए, आप कर सकते हैं split the schemainto multiple files

+0

> सही क्रम में घोंसले के एक स्तर पर, एवरो को फील्ड ऑर्डरिंग की परवाह नहीं है। पाठक जानता है कि स्कीमा के आधार पर फ़ील्ड deserialization के दौरान नाम से पहुंचा जा सकता है। – DandyDev

+0

"सही क्रम में" मेरा मतलब इसी श्रेणीबद्ध क्रम में था। मैंने उस भ्रामक वाक्यांश को हटा दिया। –

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