如何在java中将xml转换为.json文件

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18349628/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-12 00:46:25  来源:igfitidea点击:

How to convert xml to .json file in java

javaxmljson

提问by DURGA

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

but i am getting error

但我收到错误

      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

can u please help me to resolve it This is my xml format ac3 AC3 Phone ACME phone 200.0 1.0 true

你能帮我解决吗 这是我的 xml 格式 ac3 AC3 Phone ACME phone 200.0 1.0 true

i have generated this xml from my excel file and i have convert this xml file to json file

我已经从我的 excel 文件中生成了这个 xml,我已经将这个 xml 文件转换为 json 文件

采纳答案by DURGA

This is the code which is used to convert xml to json

这是用于将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();  
            }
    }  
}

回答by Jigar Joshi

You are trying to read physical Fileas a classpath Resource, which is wrong

您试图将物理读取File为类路径Resource,这是错误的

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

Change it to

将其更改为

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

回答by Subhrajyoti Majumder

String xml = IOUtils.toString(in);

Here InputStream inis null so it raise NullPointerException.

这里 InputStreamin是 null 所以它 raise NullPointerException

Class#getResourceAsStream(String name)it use to load resource from classpath and normally use in web-based project, and an absolute resource name is constructed from the given resource name using this algorithm:

Class#getResourceAsStream(String name)它用于从类路径加载资源,通常用于基于 Web 的项目,并且使用以下算法从给定的资源名称构造绝对资源名称:

  1. If the name begins with a '/' ('\u002f'), then the absolute name of the resource is the portion of the name following the '/'.
  2. Otherwise, the absolute name is of the following form: modified_package_name/name
  1. 如果名称以“/”(“\u002f”)开头,则资源的绝对名称是“/”后面的名称部分。
  2. 否则,绝对名称采用以下形式: modified_pa​​ckage_name/name

As Documentation

作为文档

As your file exists in local hard-drive(D:\\sample.xml) better use FileInputStreamto load the resouce.

由于您的文件存在于本地硬盘驱动器(D:\\sample.xml)中,因此最好用于FileInputStream加载资源。

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

Find a good related question -

找到一个很好的相关问题 -

回答by Sandio

Try the following code:

试试下面的代码:

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

回答by Valentyn Kolesnikov

Underscore-javalibrary can convert xml to json. I am the maintainer of the project. Live example

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