2016-11-23 12 views
1

私はavroスキーマを持っており、そこからすべてのフィールド名を抽出したいと思います。それを行う方法はありますか?Avroスキーマからすべてのフィールド名を取得するには?

テストスキーマは、そのようなものです:ここでは

{ 
    "type": "record", 
    "name": "wpmcn.MyPair", 
    "doc": "A pair of strings", 
    "fields": [ 
     {"name": "left", "type": "string"}, 
     {"name": "right", "type": "string"} 
    ] 
} 

はコードです:上記

public static void main(String[] args) throws IOException { 
    Schema schema = 
     new Schema.Parser().parse(AvroTest.class.getClassLoader().getResourceAsStream("pair.avsc")); 
    System.out.println(schema.getFields()); 
    } 

はそのように出力します:

[left type:STRING pos:0, right type:STRING pos:1] 

しかし、私はそれだけを返す必要があることを望みます配列リストには "left"と "right"があります。現在、私は必要のないタイプとposも返します。それを得る方法はありますか?あなたは、以下に示すようfield.name()を使用していることを行うことができます

答えて

2

public static void main(String[] args) throws IOException { 
    Schema schema = 
     new Schema.Parser().parse(AvroTest.class.getClassLoader(). 
      getResourceAsStream("pair.avsc")); 

    //Collect all field values to an array list 
    List<String> fieldValues = new ArrayList<>(); 
    for(Field field : schema.getFields()) { 
      fieldValues.add(field.name()); 
     } 

     //Iterate the arraylist 
     for(String value: fieldValues) { 
      System.out.println(value); 
     } 
    } 
+0

AvroTestに何が含まれていますか? –

関連する問題