簡體   English   中英

如何在java中將xml轉換為.json文件

[英]How to convert xml to .json file in java

  public class ConvertXMLtoJSON {

    public static void main(String[] args) throws Exception {
        InputStream in =             ConvertXMLtoJSON.class.getResourceAsStream("D:\\sample.xml");
        String xml = IOUtils.toString(in);
        XMLSerializer xmlSerializer = new XMLSerializer(); 
        JSON json = xmlSerializer.read(xml);  
        System.out.println(json.toString(2));
    }
      }

但我收到錯誤

      Exception in thread "main" java.lang.NullPointerException
at java.io.Reader.<init>(Reader.java:78)
at java.io.InputStreamReader.<init>(InputStreamReader.java:72)
at org.apache.commons.io.IOUtils.copy(IOUtils.java:1020)
at org.apache.commons.io.IOUtils.toString(IOUtils.java:358)
at com.apache.poi.ConvertXMLtoJSON.main(ConvertXMLtoJSON.java:13

你能幫我解決嗎 這是我的 xml 格式 ac3 AC3 Phone ACME phone 200.0 1.0 true

我已經從我的 excel 文件中生成了這個 xml,並且我已經將這個 xml 文件轉換為 json 文件

您正在嘗試將物理File讀取為類路徑Resource ,這是錯誤的

InputStream in = ConvertXMLtoJSON.class.getResourceAsStream("D:\\sample.xml");

將其更改為

InputStream in =  new FileInputStream(new File("D:\\sample.xml"));
String xml = IOUtils.toString(in);

這里 InputStream in為 null 所以它引發NullPointerException

Class#getResourceAsStream(String name)它用於從類路徑加載資源,通常用於基於 Web 的項目,使用以下算法從給定的資源名稱構造絕對資源名稱:

  1. 如果名稱以“/”(“\/”)開頭,則資源的絕對名稱是“/”后面的名稱部分。
  2. 否則,絕對名稱采用以下形式: modified_pa​​ckage_name/name

作為文檔

由於您的文件存在於本地硬盤驅動器( D:\\\\sample.xml )中,最好使用FileInputStream加載資源。

InputStream in =  new FileInputStream("D:\\sample.xml");

找到一個很好的相關問題 -

這是用於將xml轉換為json的代碼

 import org.json.JSONObject;
 import org.json.JSONException;
 import org.json.XML;
 import java.io.*;


 public class ConvertXMLtoJSON2{  
      public static void main(String[] args) throws Exception {  
        String fileName = "D:\\temp.json";
        try {           
            File file = new File ("D:\\output333.xml");  
            InputStream inputStream = new FileInputStream(file);  
            StringBuilder builder =  new StringBuilder();  
            int ptr = 0;  
            while ((ptr = inputStream.read()) != -1 ) {  
                builder.append((char) ptr); 
              //  System.out.println(ptr);
            }  

            String xml  = builder.toString();  
            JSONObject jsonObj = XML.toJSONObject(xml);   
            // System.out.println(jsonObj.toString()); 
            // System.out.println(jsonObj.toString().split(",").length);
            // Assume default encoding.
            FileWriter fileWriter =
                new FileWriter(fileName);

            // Always wrap FileWriter in BufferedWriter.
            BufferedWriter bufferedWriter =
                new BufferedWriter(fileWriter);

            // Always close files.

            for(int i= 0 ;i < jsonObj.toString().split(",").length; i ++) {
               System.out.println(jsonObj.toString().split(",")[i]);
               bufferedWriter.write(jsonObj.toString().split(",")[i]);
               bufferedWriter.write("\n");
            }

            bufferedWriter.close();
        }


            /* 
            String xmlString  = "<?xml version=\"1.0\"?><ASF_Service_ResponseVO id=\"1\"><service type=\"String\">OnboardingV2</service><operation type=\"String\">start_onboarding_session</operation><requested_version type=\"String\">1.0</requested_version><actual_version type=\"String\">1.0</actual_version><server_info type=\"String\">onboardingv2serv:start_onboarding_session&CalThreadId=85&TopLevelTxnStartTime=13b40fe91c4&Host=L-BLR-00438534&pid=3564</server_info><result type=\"Onboarding::StartOnboardingSessionResponse\" id=\"2\"><onboarding_id type=\"String\">137</onboarding_id><success type=\"bool\">true</success></result></ASF_Service_ResponseVO>"; 

            JSONObject jsonObj = XML.toJSONObject(xmlString);  
            System.out.println(jsonObj.toString());  
            */
          catch(IOException ex) {
                System.out.println(
                    "Error writing to file '"
                    + fileName + "'");
                // Or we could just do this:
                // ex.printStackTrace();
            } catch(Exception e) {  
                e.printStackTrace();  
            }
    }  
}

試試下面的代碼:

import org.json.JSONObject;
import org.json.XML;
import java.io.*;

public class ConverterXMLToJSON {
    public static int PRETTY_FACTOR=4;
    public static void main(String[] args) throws Exception {
        String jsonFileName = "src\\main\\resources\\Light.json";
        try {
            File xmlFile = new File("src\\main\\resources\\Light.xml");
            InputStream inputStream = new FileInputStream(xmlFile);
            StringBuilder builder = new StringBuilder();
            int ptr;
            while ((ptr = inputStream.read()) != -1) {
                builder.append((char) ptr);
            }

            String xml = builder.toString();
            JSONObject jsonObj = XML.toJSONObject(xml);
            System.out.print(jsonObj);
            FileWriter fileWriter =
                    new FileWriter(jsonFileName);

            // Always wrap FileWriter in BufferedWriter.
            BufferedWriter bufferedWriter =
                    new BufferedWriter(fileWriter);
            bufferedWriter.write(jsonObj.toString(PRETTY_FACTOR));
            bufferedWriter.close();
        } catch (IOException ex) {
            System.out.println(
                    "Error writing to file '"
                            + jsonFileName + "'");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Underscore-java庫可以將 xml 轉換為 json。 活生生的例子

import com.github.underscore.lodash.U;

public class JsonConversion {
    public static void main(String args[]) {
        String xmlString  = "<?xml version=\"1.0\"?><ASF_Service_ResponseVO id=\"1\"><service type=\"String\">OnboardingV2</service>"
        + "<operation type=\"String\">start_onboarding_session</operation><requested_version type=\"String\">1.0</requested_version>"
        + "<actual_version type=\"String\">1.0</actual_version><server_info type=\"String\">onboardingv2serv:start_onboarding_session"
        + "&amp;CalThreadId=85&amp;TopLevelTxnStartTime=13b40fe91c4&amp;Host=L-BLR-00438534&amp;pid=3564</server_info><result type="
        + "\"Onboarding::StartOnboardingSessionResponse\" id=\"2\"><onboarding_id type=\"String\">137</onboarding_id><success type="
        + "\"bool\">true</success></result></ASF_Service_ResponseVO>"; 

        String json = U.xmlToJson(xmlString);  
        System.out.println(json);  
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM