XML转换成JSON忽略属性

问题描述 投票:2回答:3

我想一个XML转换成JSON在JAVA中去除的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());

    }

}

有什么建议么?

java json xml
3个回答
2
投票

您需要使用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;
}
}  

我需要的东西更有活力,因为我的XML是在不同的结构,每一次。

你可以看看这里它采用staxon

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


1
投票

尝试做XSLT转换来获取XML转换转换之前所期望的形式。 (你也可以考虑使用XSLT 3.0 XML到JSON()函数)。

我认为这很可能是任何通用转换器将不正是你想要的东西没有前置或后置处理。


0
投票

Underscore-java库有静态方法U.fromXmlWithoutAttributes(串)和U.toJson(对象)。我是这个项目的维护者。 Live example

import com.github.underscore.lodash.U;
import java.util.Map;

public class JsonConversion {
    @SuppressWarnings("unchecked")
    public static void main(String args[]) {
        String xmlString  = "<?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>"; 

        Map<String, Object> map = (Map) U.fromXmlWithoutAttributes(xmlString);  
        System.out.println(U.toJson(map));  
    }
}    

输出:

{
  "company": {
    "staff": [
      {
        "firstname": "jim",
        "lastname": "fox"
      },
      {
        "firstname": "jay",
        "details": {
          "lastname": "box",
          "nickname": "fong fong",
          "salary": "200000"
        }
      }
    ]
  }
}    
© www.soinside.com 2019 - 2024. All rights reserved.