2

xmlをjsonに変換したい。

xmlの形式は次のとおりです-

 <default> 
      <column>                      
        <title>Title 1</title>
    <id>id1</id>
    <value>val1</value>
  </column>
  <column>
    <title>Title 2</title>
    <id>id2</id>
    <value>val2</value>
  </column>
  <column>
    <title>Title 3</title>
    <id>id3</id>
    <value>val3</value>
  </column>
  </default>

そして、変換後、私は次のjsonを期待しています-

{
    "column": [
        {
            "title": "Title 1",
            "id": "id1",
            "value": "val1"
        },
        {
            "title": "Title 2",
            "id": "id2",
            "value": "val2"
        },
        {
            "title": "Title 3",
            "id": "id3",
            "value": "val3"
        }
    ]
}

しかし、この目的でジャクソンを使用すると、次のjsonが得られます-

{
    "column": {
        "title": "Title 3",
        "id": "id3",
        "value": "val3"
    }
}

jackson1.9とjackson2.1を使用してみましたが、期待どおりの出力が得られませんでした。

誰かが私にそれが可能かどうか、または私が私のxmlフォーマットを変更する必要があるかどうかを知らせてもらえますか?以下は、上記のシナリオを達成するために私が書いたコードです-

    try {
            XmlMapper xmlMapper = new XmlMapper();
            Map entries = xmlMapper.readValue(new File("xmlPath"), Map.class);

            ObjectMapper jsonMapper = new ObjectMapper();
            String json = jsonMapper.writeValueAsString(entries);
            System.out.println(json);

        } catch (Exception e) {
            e.printStackTrace();
        }       

ありがとう

4

3 に答える 3

2

org.json API を使用してソース XML をJSONObjectに変換し、Jackson API によって JSONに変換することで、この問題の解決策を得ることができました。

コード

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

import org.apache.commons.io.IOUtils;
import org.json.JSONObject;
import org.json.XML;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

...
...

try (InputStream inputStream = new FileInputStream(new File(
                "source.xml"))) {
    String xml = IOUtils.toString(inputStream);
    JSONObject jObject = XML.toJSONObject(xml);
    ObjectMapper mapper = new ObjectMapper();
    mapper.enable(SerializationFeature.INDENT_OUTPUT);
    Object json = mapper.readValue(jObject.toString(), Object.class);
    String output = mapper.writeValueAsString(json);
    System.out.println(output);
}

...
...
于 2016-04-07T19:06:38.353 に答える
0

グループ プロジェクトに取り組んでいるときに、あなたが説明したのと同じ問題に遭遇しました。これを機能させるために使用した解決策は、Maven の依存関係を Jackson から json-lib に変更することでした。このサイトをガイドとして使用しました: http://answers.oreilly.com/topic/278-how-to-convert-xml-to-json-in-java/

<dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
    <type>jar</type>
    <classifier>jdk15</classifier>
    <scope>compile</scope>
</dependency>

--$pli7

于 2013-05-13T21:07:37.017 に答える