2014-03-06 2 views
17

제 문제는지도의 내용을 JSON으로 serialize하는 것입니다.이름/값 구조에 JSON 스키마를 만드는 방법은 무엇입니까?

출력 (JSON)에는 키/이름 구문 규칙을 따르는 객체가 있습니다.

키는 맵 키와 값의 이름에서 만들어집니다.

모델 예 :

class Storage { 
     Map<String,String> values = new HashMap<>(); 

     { 
     map.put("key1","key1"); 
     map.put("key2","key2"); 
     map.put("key3","key3"); 
     } 

    } 

JSON 예 목적 :

{ 
    key1=value1, 
    key2=value2, 
    key3=value3 
} 

JSON 스키마 :

{ 
    "name": "storage", 
    "description": "Store of key values", 
    "properties": { 
    // How can we describe the properties if we do not know the name ? 
    } 
} 
문제는 내가 모르겠입니다

어떤 값 것이다 그러나 나는 그들이 어떤 사람들이 될 것을 압니다. .

스키마의 전체 정의를 알려줄 수 있습니까?


면책 조항 :

나는이 또한

{ 
    values: [ 
     {key="key1", value="value1"}, 
     {key="key2", value="value2"}, 
     {key="key3", value="value3"} 
    ] 
} 

로 직렬화 할 수 있지만 JSON의 배열을하지 않으려는 것을 알고있다.

+0

당신이 될 것입니다 가지고있는 특성 같은 소리 모델에 오류를했다 didnt가 있지만 - 솔루션 1 개 didnt 한 필요에 따라 일 "key"의 배열 : "value": . – ErstwhileIII

+0

나는 쌍의 배열을 갖고 싶지 않습니다. 나는 key = value를 가지고 있고 그것을 deserialize하기에 유효한 객체의 부분으로 갖고 싶습니다. –

+0

그래서 선험적으로 이름을 모르는 상황에서 이름, 값 쌍을 지정하는 방법을 묻는 중입니까? 할 수 없습니다. 어쨌든, 당신의 목표는 HashMap을 재구성 할 수 없습니까? 이 경우 키, 값을 추가하는 루프를 거치게됩니다. – ErstwhileIII

답변

17

유효성 검사기가 지원한다고 가정하면 patternProperties을 사용할 수 있습니다. 이 문자열이기 때문에 스키마를 들어

...

{ 
    "title": "Map<String,String>", 
    "type": "object", 
    "patternProperties": { 
    ".{1,}": { "type": "string" } 
    } 
} 

... 그리고 문서 ...

{ 
    "foo":"bar", 
    "baz":1 
} 

... 부동산 foo는의 값이 유효 baz은 숫자이기 때문에 유효성 검사에 실패합니다. { "유형": "문자열"}

+5

심지어 더 간단합니다 :' "additionalProperties": { "type": "string"}'을 사용하십시오. 명시되지 않은 속성이 지정된 스키마를 충족해야 함을 지정합니다. – augurar

+0

@augurar처럼 좋지만, 슬프게도 많은 도구가이 기능을 지원하지 않습니다. –

0

나는 @augurar "additionalProperties"에 의해 제안 된 솔루션을 사용 AWS API 게이트웨이 모델에 대한

을 .... 그리고 SDK는 다음과 같이지도 변수를 생성 할 수 있었다 자바/안드로이드 SDK

@Arne Burmeister 필요 - 내 경우 - 그것 (스키마 작성)

관련 문제