java - 将 XML 转换为 JSON 忽略属性

标签 java json xml

我正在尝试在 JAVA 中将 XML 转换为 JSON,并从 XML 中删除标签属性。

我尝试使用org.json.XML,但它不能满足我的需求。

有一个库可以做我想做的事情吗?

输入示例:

<?xml version="1.0"?>
<company g="j">
    <staff id="1001">
        <firstname hi="5">jim</firstname>
        <lastname>fox</lastname>
    </staff>
    <staff id="2001">
        <firstname a="7">jay</firstname>
        <details tmp="0">
            <lastname>box</lastname>
            <nickname >fong fong</nickname>
            <salary id="99">200000</salary>
        </details>
    </staff>
</company>

期望的输出:

{
    "company": {
        "staff": [
            {
                "firstname": "jim"
                "lastname": "fox",
            },
            {
                "firstname": "jay",
                "details": {
                    "lastname": "box",
                    "nickname": "fong fong",
                    "salary":"200000",
            }
        ]
    }
}

我尝试了以下方法,但它使用属性转换 xml:

package my.transform.data.utils;

import java.io.File;
import org.apache.commons.io.FileUtils;
import org.json.XML;
import org.json.JSONObject;

public class JSONObjectConverter {

    public static void main(String[] args) throws Exception {

        String xml = FileUtils.readFileToString(new File("src/main/resources/staff.xml"));
        JSONObject aJson = XML.toJSONObject(xml);
        System.out.println(aJson.toString());

    }

}

有什么建议吗?

最佳答案

您需要使用 JAXB 将 xml 内容解码到 java 对象,然后使用该 java 对象准备 JSON。

JAXB 将给定的 xml 转换为 java 对象(这称为解码),然后该 java 对象可用于形成 JSON

您可以引用以下代码片段:

public class JAXBToJsonConverter {
     public static void main(String[] args) {
        try {  
            //save the company details content to a .xml file
            // and refer the path below
            File file = new File("C:\\myproject\\company.xml");  

            //create the jaxb context and unmarshall
            JAXBContext jaxbContext = JAXBContext.newInstance(Company.class);  

            Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();  
            Company company= (Company) jaxbUnmarshaller.unmarshal(file);  

            //create the JSON object
            JSONObject json = new JSONObject(company);
            System.out.println(json);
          } catch (JAXBException e) {  
            e.printStackTrace();  
          }  
    }
  }

公司类别:

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Company {

    private Staff staff;

    @XmlElement
    public Staff getStaff() {
        return staff;
    }

    public void setStaff(Staff staff) {
        this.staff = staff;
    }
  }

员工等级:

public class Staff {
    private String firstname;
    private String lastname;

    @XmlElement
    public String getFirstname() {
        return firstname;
    }
    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    @XmlElement
    public String getLastname() {
        return lastname;
    }
    public void setLastname(String lastname) {
        this.lastname = lastname;
    }
}

详细信息类:

 public class Details {
     private String lastname;
     private String nickname;
     private int salary;

@XmlElement
public String getLastname() {
   return lastname;
}
public void setLastname(String lastname) {
    this.lastname = lastname;
}

 @XmlElement
 public String getNickname() {
     return nickname;
 }
 public void setNickname(String nickname) {
    this.nickname = nickname;
 }

 @XmlElement
 public int getSalary() {
    return salary;
}
public void setSalary(int salary) {
    this.salary = salary;
}
}  

I need something more dynamic, since my xml is in a different structure every time.

您可以在这里查看使用 staxon 的内容:

https://github.com/beckchr/staxon/wiki/Converting-XML-to-JSON

关于java - 将 XML 转换为 JSON 忽略属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40326986/

相关文章:

c# - WPF 读/写 JSON 与 XML

java - 使用 XML for Fragments 有什么意义?

java - 为什么 w3c.dom.Element 是按照字母顺序设置属性的?

Java指数法

java - WebLogic 默认会在哪里查找文件?

json - 根据内容重命名 JSON 文件

java - 使用 Gson 解析复杂的嵌套 JSON 数据

java - 串行端口,如何读取您发送给设备的内容?

java - 使用Java解析xml

android - obj.getJSONArray 未获取 JSON 响应