373.5. 네임스페이스 매핑
XML에는 요소와 속성을 완전히 한정하기 위한 네임스페이스가 있습니다. JSON은 그렇지 않습니다. XML-JSON 변환을 수행할 때 이 점을 고려해야 합니다.
간격을 메우기 위해 Json-lib 에는 접두사 및 네임스페이스 URI 형식의 네임스페이스 선언을 XML 출력 요소에 바인딩하는 옵션이 있으며, 비마이크립션(예: JSON에서 XML로 변환)이 있습니다. 예를 들어 다음 JSON 문자열을 제공합니다.
{ "pref1:a": "value1", "pref2:b": "value2" }
Json-lib에 pref1:a
및 pref2:b
요소에 대한 네임스페이스 선언을 출력하도록 요청하여 접두사 pref1
및 pref2
를 특정 네임스페이스 URI에 바인딩하도록 요청할 수 있습니다.
이 기능을 사용하려면 Cryostat JsonDataFormat.NamespacesPer CryostatMapping
개체를 만들고 namespaceMappings
옵션( List
)에 추가하기만 하면 됩니다.
Cryo statJsonDataFormat.NamespacesPer CryostatMapping
에는 요소 이름과 맵이 [prefix Cryostat 네임스페이스 URI]가 있습니다. 여러 접두사 및 네임스페이스 URI를 쉽게 매핑하기 위해 NamespacesPer#159Mapping(String 요소, 문자열 pipeSeparatedMappings)
생성자는 |ns2|http://camel.apache.org/personalData|ns3|http://camel.apache.org/personalData2|
과 같은 방식으로 [prefix, namespaceURI] 쌍의 문자열 기반 파이프 시퀀스를 사용합니다.
기본 네임스페이스를 정의하려면 해당 키 필드를 비워 둡니다. |ns1|http://camel.apache.org/test1||http://camel.apache.org/default|
.
요소 name = 빈 문자열에 바인딩 네임스페이스 선언은 해당 네임스페이스를 root 요소에 연결합니다.
전체 코드는 다음과 같습니다.
XmlJsonDataFormat namespacesFormat = new XmlJsonDataFormat(); List<XmlJsonDataFormat.NamespacesPerElementMapping> namespaces = new ArrayList<XmlJsonDataFormat.NamespacesPerElementMapping>(); namespaces.add(new XmlJsonDataFormat. NamespacesPerElementMapping("", "|ns1|http://camel.apache.org/test1||http://camel.apache.org/default|")); namespaces.add(new XmlJsonDataFormat. NamespacesPerElementMapping("surname", "|ns2|http://camel.apache.org/personalData|" + "ns3|http://camel.apache.org/personalData2|")); namespacesFormat.setNamespaceMappings(namespaces); namespacesFormat.setRootElement("person");
그리고 Spring DSL에서도 동일한 결과를 얻을 수 있습니다.
373.5.1. 예
다음 JSON 문자열에서 위의 Java 스니펫에서 네임스페이스 바인딩을 사용합니다.
{ "name": "Raul", "surname": "Kripalani", "f": true, "g": null}
다음 XML을 생성합니다.
<person xmlns="http://camel.apache.org/default" xmlns:ns1="http://camel.apache.org/test1"> <f>true</f> <g null="true"/> <name>Raul</name> <surname xmlns:ns2="http://camel.apache.org/personalData" xmlns:ns3="http://camel.apache.org/personalData2">Kripalani</surname> </person>
JSON 사양은 다음과 같이 JSON 오브젝트를 정의합니다.
오브젝트는 순서가 지정되지 않은 이름/값 쌍 집합입니다. […].
따라서 요소는 출력 XML에서 다른 순서로 표시됩니다.