【问题标题】:XML to JSON Conversion in java with xml attributes带有xml属性的java中的XML到JSON转换
【发布时间】:2017-04-24 16:39:16
【问题描述】:

我有一个带有 xml 属性的 xml,如下所示。现在,当我将此 xml 转换为 JSON 时,由于 BvdState 中存在一个属性,它会失败。我不知道如何处理这个?

<State>
    <Number>3</Number>
    <Name>MotherBIG</Name>
    <BvdState i:nil="true"/>
    <HistoryState>3</HistoryState>
</State>

【问题讨论】:

标签: java json xml gson


【解决方案1】:

你可以这样处理这个属性——

inputStream = XMLtoJsonConverter.class.getClassLoader().getResourceAsStream("simple.xml");
String xml = IOUtils.toString(inputStream);
System.out.println(org.json.XML.toJSONObject(xml).toString(4));

如果您想深入了解 xml 到 json 序列化,请查看 this。使用它时,您只想创建一个 xml 结构的 pojo 类,仅此而已。

看看下面的代码 -

JacksonDeserializer.java -

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import java.io.IOException;
import java.net.URL;
import java.util.List;


public class JacksonDeserializer {

    private List<Item> item;
    private XmlMapper xmlMapper = null;
    private SimpleModule module = null;
    private Channel ch = null;

    public List<Item> getItem() {
        return item;
    }

    public void setItem(List<Item> item) {
        this.item = item;
    }

    public void readXML() throws IOException {
        xmlMapper = new XmlMapper();
        module = new SimpleModule();
        ch = new Channel();
        module.addDeserializer(List.class, ch.new ChannelDeserializer());
        xmlMapper.registerModule(module);
        xmlMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        URL url = new URL("some xml data available on url");
        Rss rss = xmlMapper.readValue(url, Rss.class);//you can provide xml file also
        Channel channel = rss.getChannel();
        JacksonDeserializer obj = new JacksonDeserializer();
        item = channel.getItem();
        obj.setItem(item);
    }
}

Rss.java -

public class Rss {

    private Channel channel;

    public Rss() {
    }

    public Channel getChannel() {
        return channel;
    }

    public void setChannel(Channel channel) {
        this.channel = channel;
    }
}

Channel.java -

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Channel {

    private List<Item> item = new ArrayList();

    public Channel() {
    }

    public List<Item> getItem() {
        return item;
    }

    public void setItem(List<Item> item) {
        this.item = item;
    }

    public class ChannelDeserializer extends JsonDeserializer<List<Item>> {

        @Override
        public List<Item> deserialize(JsonParser jp, DeserializationContext arg1) throws IOException, JsonProcessingException {
            JsonNode jsonNode = jp.getCodec().readTree(jp);

            String title = jsonNode.get("title").asText();
            String link = jsonNode.get("link").asText();
            String description = jsonNode.get("description").asText();
            String pubDate = jsonNode.get("pubDate").asText();
            String source = jsonNode.get("source").path("").asText();
            Item i = new Item(title, link, description, pubDate, source);
            item.add(i);
            return item;
        }
    }
}

Item.java -

public class Item {

    private String title;
    private String link;
    private String description;
    private String pubDate;
    private String source;

    public Item() {
    }

    public Item(String title, String link, String description, String pubDate, String source) {
        this.title = title;
        this.link = link;
        this.description = description;
        this.pubDate = pubDate;
        this.source = source;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getLink() {
        return link;
    }

    public void setLink(String link) {
        this.link = link;
    }

    public String getSource() {
        return source;
    }

    public void setSource(String source) {
        this.source = source;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getPubDate() {
        return pubDate;
    }

    public void setPubDate(String pubDate) {
        this.pubDate = pubDate;
    }
}

【讨论】:

  • @user34567- 如果您在我的答案中找到任何有用的信息,请为我的答案提供声誉,或者您发现它是正确答案,那么不要忘记标记为正确答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-07
  • 1970-01-01
  • 2016-08-09
  • 2016-10-26
  • 2017-08-28
  • 2023-03-15
相关资源
最近更新 更多