我正在尝试在 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/