XML到JSON在Java中使用xml属性进行转换 [英] XML to JSON Conversion in java with xml attributes
问题描述
我有一个xml和xml属性,如下所示。现在,当我将这个XML转换为JSON时,它失败了,因为BvdState中存在一个属性。我不知道如何处理这个?
<州>
< Number> 3< / Number>
<名称> MotherBIG< / Name>
< BvdState i:nil =true/>
< HistoryState> 3< / HistoryState>
< / State>
你可以用这种方式处理这个属性 - / p>
inputStream = XMLtoJsonConverter.class.getClassLoader()。getResourceAsStream(simple.xml);
String xml = IOUtils.toString(inputStream);
System.out.println(org.json.XML.toJSONObject(xml).toString(4));
如果您想深入xml以查看json序列化,请查看此 。在使用这个时,你只是想创建一个pojo类的xml结构,而不仅限于此。
请看下面的代码 -
$ b 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;
公共类JacksonDeserializer {
私人列表<项目>项目;
private XmlMapper xmlMapper = null;
private SimpleModule module = null;
私人频道ch = null;
公共列表<项目> getItem(){
return item;
}
public void setItem(List< Item> item){
this.item = item;
}
public void readXML()throws IOException {
xmlMapper = new XmlMapper();
module = new SimpleModule();
ch =新频道();
module.addDeserializer(List.class,ch.new ChannelDeserializer());
xmlMapper.registerModule(module);
xmlMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
URL url =新的URL(url上的一些xml数据);
Rss rss = xmlMapper.readValue(url,Rss.class); //你也可以提供xml文件
Channel channel = rss.getChannel();
JacksonDeserializer obj = new JacksonDeserializer();
item = channel.getItem();
obj.setItem(item);
}
}
Rss.java -
公共类Rss {
私人频道频道;
public Rss(){
}
公共频道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;
公开课频道{
私人列表<项目> item = new ArrayList();
公共频道(){
}
公共列表<项目> getItem(){
return item;
}
public void setItem(List< Item> item){
this.item = item;
}
公共类ChannelDeserializer扩展了JsonDeserializer< List< Item>> {
@Override
public List< Item> deserialize(JsonParser jp,DeserializationContext arg1)抛出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);
退货项目;
}
}
}
Item.java -
public class Item {
private String title;
私有字符串链接;
私有字符串描述;
private String pubDate;
私人字符串来源;
$ b $ 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;
}
}
I have one xml with xml attributes as below. Now when i convert this xml to JSON it fails because of an attribute present into BvdState. I dont know how to deal with this ?
<State>
<Number>3</Number>
<Name>MotherBIG</Name>
<BvdState i:nil="true"/>
<HistoryState>3</HistoryState>
</State>
You can deal with this attribute in this way -
inputStream = XMLtoJsonConverter.class.getClassLoader().getResourceAsStream("simple.xml");
String xml = IOUtils.toString(inputStream);
System.out.println(org.json.XML.toJSONObject(xml).toString(4));
If you want to go into depth of xml to json serialization look at this. while using this, you just want to create a pojo classes of xml structure nothing more than that.
Take a look at below code -
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;
}
}
这篇关于XML到JSON在Java中使用xml属性进行转换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!