2016-10-30 153 views
2

我試圖在XML中將XML轉換爲JSON從XML中移除標記屬性。將XML轉換爲JSON忽略屬性

我試過使用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()); 

    } 

} 

有什麼建議?

+0

你能看看我的答案,讓我知道嗎? – developer

回答

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

+0

我需要更動態的東西,因爲我的xml每次都處於不同的結構中,我在尋找更通用的東西,比如'XML.toJSONObject(xml)',而不需要創建類。 – dina

+0

好的。我會看一下。謝謝您的幫助! – dina

1

嘗試做XSLT轉換來獲取XML轉換轉換之前所期望的形式。 (您也可以考慮使用XSLT 3.0 xml-to-json()函數)。

我想很可能任何通用轉換器都會在沒有預處理或後處理的情況下完成您想要的工作。