2017-11-27 9 views
3

私は以下を持っていますYAML私はJacksonパーサをJavaで解析したいと思います。Javaでヤールを解析する

android: 
    "7.0": 
     - nexus 
     - S8 
    "6.0": 
     - s7 
     - g5 
ios: 
    "10.0": 
     - iphone 7 
     - iphone 8 

私はandroidためJava Objectとしてgettersetterを持って作成されたclassを作成しました。それはうまく動作します。しかし、私はどうすれば同じことをするのですか6.07.0? I'm usingジャクソンのパーサー

+1

例を探しましたか?最初のGoogleの結果 - https://dzone.com/articles/read-yaml-in-java-with-jackson –

+0

@DanWはい、私は参照としてまったく同じページを使用しました。しかし、数値があるときにそれを動作させる方法がわかりません。例えば: '7.0' –

+0

@ Damien-Amen:文字列として扱います。彼らは数字のように見えることを無視してください。彼らは実際には文字列です – Henrik

答えて

2

ジャクソンがそれをサポートしているかどうかわかりません。ここでは、プレーンSnakeYamlとソリューションは(人々はそれがないすべては基本的にはバックエンドとして使用していますSnakeYamlで可能な詳細な構成を奪うときにYAMLを解析するためにジャクソンを使用する理由私が理解することはありません)です。

class AndroidValues { 
    // showing what needs to be done for "7.0". "8.0" works similarly. 
    private List<String> v7_0; 

    public List<String> getValuesFor7_0() { 
     return v7_0; 
    } 

    public void setValuesFor7_0(List<String> value) { 
     v7_0 = value; 
    } 
} 

// ... in your loading code: 

Constructor constructor = new Constructor(YourRoot.class); 
TypeDescription androidDesc = new TypeDescription(AndroidValues.class); 
androidDesc.substituteProperty("7.0", List.class, "getValuesFor7_0", "setValuesFor7_0"); 
androidDesc.putListPropertyType("7.0", String.class); 
constructor.addTypeDescription(androidDesc); 
Yaml yaml = new Yaml(constructor); 

// and then load the root type with it 

注:コードはテストされていません。

1

注釈com.fasterxml.jackson.annotation.JsonPropertyを試してください。以下に簡単な例を示します。

サンプルYAMLファイル:

--- 
"42": "some value" 

データ転送オブジェクトクラス:

public class Entity { 

    @JsonProperty("42") 
    private String value; 

    public String getValue() { 
     return value; 
    } 

    public void setValue(String value) { 
     this.value = value; 
    } 

} 

パーサー:

public class Parser { 

    public static void main(String[] args) throws IOException { 
     ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); 
     Entity entity = mapper.readValue(new File("src/main/resources/sample.yml"), Entity.class); 
     System.out.println(entity.getValue()); 
    } 

} 

コンソール出力は次のようになりますsome value

P.S.私は以下の依存関係を持ってテストしました:

<dependency> 
     <groupId>com.fasterxml.jackson.dataformat</groupId> 
     <artifactId>jackson-dataformat-yaml</artifactId> 
     <version>2.3.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>2.2.3</version> 
    </dependency>