JavaでXMLをJSONに変換する最も簡単な方法[終了]


171

JavaでXMLをJSONにすばやく簡単に変換するための優れたツールは何ですか?


仕様の要件により、XMLを直接使用することはできませんが、同意します。ありがとう!
BeachRunnerFred 2009

@BeachRunnerJoe:どのインポートを記述する必要がありますか?import net.sf.json.JSONObject;またはimport org.json.JSONObject;。また、どのjarを含める必要がありますか?
Fahim Parkar

1
ここではJAXPを使用して依存せずにそれを行うための方法へのリンク、です:stackoverflow.com/questions/27222992/...
bvdb

16
非常に高い可視性を備えたSOの閉じた質問が大好きです...そのような有用な質問が閉じられた場合、どこかで問題が発生しました。
Dariusz

2
私が最も有用な質問の90%が「クローズド・オフトピック」だと思います.. SMH
Jery​​lクック

回答:


188

JavaのJSONにはいくつかの優れたリソースがあります。

Maven依存関係:

<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;。また、どのjarを含める必要がありますか?
Fahim Parkar

2
XML.javaだけでなく、すべてのファイルをダウンロードします。ここから:github.com/douglascrockford/JSON-java/downloads
Spiff

4
あなたが持っている場合はどうなります<test attrib="moretest" content="foo">bar</test>か?
wchargin 2013年

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リポジトリから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ファイルがある場合、オープンソースのEclipseリンクjarを使用して、xmlをjsonに、jsonをxmlに簡単に変換できます。JAVAプロジェクトの詳細なサンプルは、ここにあります:cubicrace.com/2015/06/How-to-convert-XML-to-JSON-format.html
Piyush Chordia '25

JSONパッケージ全体をプロジェクトにコピーし、パッケージの名前を変更する必要がありました。Gradleに追加すると、ビルド中にAndroidからの重複パッケージの警告が表示されます。
codelearner

28

JavaでのJSONの唯一の問題は、XMLに子が1つあるが配列の場合、それが配列ではなくオブジェクトに変換されることです。これは、常にXMLからJSONに動的に変換する場合に問題を引き起こす可能性があります。たとえば、サンプルXMLに要素が1つしかない場合はオブジェクトを返しますが、2 +がある場合は配列を返すため、 JSON。

InfoscoopのXML2JSONクラスには、変換を行う前に配列である要素にタグを付ける方法があるため、XMLに子が1つしかない場合でも、配列を適切にマップできます。

ここでの例(若干異なる言語で、しかし、あなたはまた、配列がXML2JSONリンクのnodelist2json()メソッドから使用されているかを確認することができます)、それを使用します。


Pythonでは「xml-to-json」ライブラリを使用していますが、これは意味上の問題です。この「配列またはオブジェクト」の問題を解決するために行うことは、「tryConvertToArray()」メソッドを記述して、単一のオブジェクトを含む配列を返すことです。したがって、常に値が配列であると信頼できます
kommradHomer '29

それがどのように問題を解決するのか私にはわかりません。それでは、すべてをオブジェクトではなく配列にしますか?たとえば、私がXMLを持っている場合<results><result><value>1</value></result></results>、それは生成されます { "results" : { "result" : { "value" : "1" } } }{ "results" : [ { "result" : { "value" : "1" } } ] }
Marcus

配列であることが期待されるものがあります。この配列に要素が1つしかない場合に問題が発生し、xml-to-jsonコンバーターのオブジェクトになります。したがって、これが単一の要素の配列であることを期待しているので、それをチェックして配列に変換し、配列を期待する場所に配列があることを確認します。
kommradHomer 2013年

しかし、特定の要素が配列になることをどのように期待しますか?XML2JSONは要素にタグを付けます。タグ付けせずに配列であると想定する方法は明確ではありません。それ以外の場合は、単一の要素「配列」ではわからないためです。
マーカス

たとえば、「phonenumbers」という要素があります。また、「phonenumbers」要素に1つ以上の「phonenumber」要素があります。したがって、「phonenumbers」に「phonenumber」要素が1つしかない場合、xml2jsonはphonenumberオブジェクトを作成しますが、phonenumber配列を作成してそれにphonenumberオブジェクトを配置します。
kommradHomer 2013年


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を調べることもできます。これは、XMLやJsonへのJava POJOのマーシャリング/アンマーシャリングの標準です。ApacheのCXFなど、JAX-Bを実装する複数のライブラリがあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.