Java 将XML转换为JSON忽略属性

Java 将XML转换为JSON忽略属性,java,json,xml,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</last

我试图在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>
我尝试了以下操作,但它使用属性转换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;
}
}  
员工等级:

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;
}
}  
详细信息类别:

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;
}
}  

我需要更具动态性的东西,因为我的xml是另一种格式 每一次的结构

您可以在这里查看使用staxon的代码:


在转换之前,尝试进行XSLT转换,以将XML转换为所需的格式。(也可以考虑使用XSLT 3 XML- to-JSON()函数。

我认为,任何通用转换器都很可能在不进行预处理或后处理的情况下实现您想要的功能。

库中有静态方法U.fromXmlWithoutAttributes(字符串)和U.toJson(对象)。我是项目的维护者


你能看一下我的答案并让我知道吗?我需要一些更动态的东西,因为我的xml每次都处于不同的结构中,我需要一些更通用的东西,比如
xml.toJSONObject(xml)
,而不需要创建类。