Java에서 XML을 JSON으로 변환하는 가장 빠른 방법


171

Java에서 XML을 JSON으로 빠르고 쉽게 변환하는 데 유용한 도구는 무엇입니까?


사양의 요구 사항으로 인해 XML을 직접 사용할 수는 없지만 동의합니다. 감사!
BeachRunnerFred 2009

@BeachRunnerJoe : 어떤 가져 오기를 작성해야합니까? import net.sf.json.JSONObject;또는 import org.json.JSONObject;. 또한 어떤 항아리를 포함해야합니까?
Fahim Parkar

1
다음은 JAXP를 사용하여 종속성없이 수행하는 방법에 대한 링크입니다. stackoverflow.com/questions/27222992/…
bvdb

16
나는 매우 높은 가시성을 가진 SO의 비공개 질문을 좋아합니다.
다리우스

2
가장 유용한 질문의 90 %가 "닫힌 주제"라고 생각합니다
..smh

답변:


188

Java의 JSON 에는 훌륭한 리소스가 있습니다.

메이븐 의존성 :

<dependency>
  <groupId>org.json</groupId>
  <artifactId>json</artifactId>
  <version>20180813</version>
</dependency>

XML.java 찾고있는 수업입니다.

import org.json.JSONObject;
import org.json.XML;

public class Main {

    public static int PRETTY_PRINT_INDENT_FACTOR = 4;
    public static String TEST_XML_STRING =
        "<?xml version=\"1.0\" ?><test attrib=\"moretest\">Turn this to JSON</test>";

    public static void main(String[] args) {
        try {
            JSONObject xmlJSONObj = XML.toJSONObject(TEST_XML_STRING);
            String jsonPrettyPrintString = xmlJSONObj.toString(PRETTY_PRINT_INDENT_FACTOR);
            System.out.println(jsonPrettyPrintString);
        } catch (JSONException je) {
            System.out.println(je.toString());
        }
    }
}

출력은 다음과 같습니다

{"test": {
    "attrib": "moretest",
    "content": "Turn this to JSON"
}}

14
경고 : json.org.XML 패키지는 Android에 없습니다!
Ludovic Landry

2
@danieltalsky : 어떤 수입품을 써야합니까? import net.sf.json.JSONObject;또는 import org.json.JSONObject;. 또한 어떤 항아리를 포함해야합니까?
Fahim Parkar

2
XML.java뿐만 아니라 모든 파일을 다운로드하십시오. 여기에서 : github.com/douglascrockford/JSON-java/downloads
Spiff

4
당신이 있다면 <test attrib="moretest" content="foo">bar</test>?
wchargin 2016 년

1
참고 : org.json의 XML.toJSONObject ()는 xml 목록을 json 배열로 올바르게 변환합니다 (기본적으로 자동으로 삼키는 Jackson의 XmlMapper와 달리).
Agoston Horvath

58

XML 파일을 JSON으로 변환하려면 다음 종속성을 포함하십시오.

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20140107</version>
</dependency>

Maven Repository에서 Jar를 다운로드 할 수 있습니다 . 그런 다음 다음과 같이 구현하십시오.

String soapmessageString = "<xml>yourStringURLorFILE</xml>";
JSONObject soapDatainJsonObject = XML.toJSONObject(soapmessageString);
System.out.println(soapDatainJsonObject);

5
+ maven 의존성 제공
zacheusz

2
최신 버전에서 이상한 오류가 발생하여 Java 7에 있으면 게시물에 언급 된 json 버전을 사용하십시오.
urug

XML 스 니펫에 유효한 dtd 파일이있는 경우 오픈 소스 일식 링크 jar을 사용하여 xml을 json으로, json을 xml로 쉽게 변환 할 수 있습니다. 상세 샘플 자바 프로젝트는 여기에서 찾을 수 있습니다 : cubicrace.com/2015/06/How-to-convert-XML-to-JSON-format.html
Piyush Chordia을

전체 JSON 패키지를 프로젝트에 복사하고 패키지 이름을 변경해야했습니다. gradle에 추가하면 빌드 중에 Android에서 패키지가 중복된다는 경고가 표시됩니다.
codelearner

28

Java에서 JSON 의 유일한 문제 는 XML에 자식이 하나이지만 배열 인 경우 배열 대신 객체로 변환한다는 것입니다. 동적으로 항상 XML에서 JSON으로 변환하는 경우 문제가 발생할 수 있습니다. 예를 들어 XML에 하나의 요소 만있는 경우 개체를 반환하지만 2 이상인 경우 배열을 반환하면 JSON.

Infoscoop의 XML2JSON 클래스에는 변환을 수행하기 전에 배열 인 요소에 태그를 지정하는 방법이 있으므로 XML에 자식이 하나만 있어도 배열을 올바르게 매핑 할 수 있습니다.

다음은이 언어를 사용 하는 예 입니다 (약간의 언어는 다르지만 XML2JSON 링크의 nodelist2json () 메소드에서 배열이 사용되는 방법도 볼 수 있습니다).


우리는 파이썬에서 "xml-to-json"라이브러리를 사용하고 있으며 이것은 의미 상 문제입니다. 이 "배열 또는 객체"문제를 해결하기 위해하는 일은 "tryConvertToArray ()"메소드를 작성하는 것입니다.이 메소드는 단일 객체가 포함 된 배열을 반환합니다. 따라서 항상 가치를 배열로 신뢰할 수 있습니다
kommradHomer

그것이 어떻게 문제를 해결하는지는 분명하지 않습니다. 그렇다면 객체 대신 모든 것을 배열로 만듭니 까? 예를 들어, XML이 있다면 XML <results><result><value>1</value></result></results>이 생성 { "results" : { "result" : { "value" : "1" } } } 되거나 { "results" : [ { "result" : { "value" : "1" } } ] }
Marcus

배열이 될 것으로 예상되는 것이 있습니다. 이 배열에 요소가 1 개만 있으면 xml-json 변환기의 오브젝트가 될 때 문제점이 발생합니다. 따라서 이것이 단일 요소에 대한 배열 일 것으로 예상하므로 배열을 확인하고 배열로 변환하여 배열을 기대하는 배열이 있는지 확인합니다.
kommradHomer

그러나 특정 요소가 배열이 되려면 어떻게해야합니까? XML2JSON은 요소에 태그를 지정합니다. 태그를 지정하지 않고 배열이 될 것으로 예상하는 방법은 명확하지 않습니다. 그렇지 않으면 단일 요소 '배열'로 알 수 없기 때문입니다.
Marcus

예를 들어 "phonenumbers"라는 요소가 있습니다. 그리고 "phonenumbers"요소에 하나 이상의 "phonenumber"요소가 있습니다. 따라서 "phonenumbers"에 "phonenumber"요소가 하나만 있으면 xml2json은 phonenumber 객체를 만들지 만 phonenumber 배열을 만들어 phonenumber 객체를 넣습니다.
kommradHomer 2016 년


2

나는 이것을 빠르고 쉬운 방법으로 발견했다 : 사용 : org.json.XMLjava-json.jar의 클래스

if (statusCode == 200 && inputStream != null) {
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
    StringBuilder responseStrBuilder = new StringBuilder();

    String inputStr;
    while ((inputStr = bufferedReader.readLine()) != null) {
        responseStrBuilder.append(inputStr);
    }

    jsonObject = XML.toJSONObject(responseStrBuilder.toString());
}

1

정확한 문제가 무엇인지 모르겠지만 XML을 수신하고 JSON (또는 다른 것)을 반환하려는 경우 JAX-B를 볼 수도 있습니다. 이것은 Java POJO를 XML 및 / 또는 Json에 마샬링 / 언 마샬링하기위한 표준입니다. JAX-B를 구현하는 여러 라이브러리 (예 : Apache CXF)가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.