2017-11-27 3 views
3

다음과 같습니다. YAML Java에서 구문 분석기 Jackson을 사용하여 구문 분석하려고합니다. Java에서 Yaml 구문 분석

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

android위한 Java Object로서 생성 getter을 보유하고 class setter을 만들었다. 그것은 잘 작동합니다. 하지만 어떻게해야합니까? 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

잭슨의 지원 여부는 알 수 없습니다.

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 

주 : 여기에 (사람들이 때 모든 것이 기본적으로는 백엔드로 사용 SnakeYaml와 가능한 자세한 구성을 빼앗아됩니다 않습니다 YAML을 구문 분석 잭슨을 사용하는 이유를 이해하지 않습니다) 일반 SnakeYaml있는 솔루션입니다 코드는 테스트되지 않았습니다.

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. 다음 종속성을 테스트했습니다 :

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