将jsonobject数据写入xml标签

时间:2018-08-31 13:53:38

标签: java json xml file

我想从xml文件读取到JSONObject并将其写入另一个xml文件。

但是我在将JSONObject写入Java中的xml文件的地方出错了。

我正在使用org.json jar文件

我可以知道,我要去哪里错了?

要求:         将JSONObject写入标记中的XML文件。

我的代码段:

public class xmltojson
{
    static String line="",str="";
    public static void main(String[] args) throws JSONException, IOException
    {
        String link = "SOURCE_FILEPATH\\Files.xml";
        BufferedReader br = new BufferedReader(new FileReader(link));
        while ((line = br.readLine()) != null)
        {
           str+=line;
        }

        JSONObject jsondata = XML.toJSONObject(str);

        String xml = XML.toString(jsondata);

        String xmlFile = DESTINATION_FILEPATH\\filefromjson.xml";

        try (FileWriter fileWriter = new FileWriter(xmlFile))
        {
            fileWriter.write(XML.toString(jsondata));
        }
    }
}

当前输出:

<?xml version="1.0"?>

-<Files>

<clsid>{215B2E53-57CE-475c-80FE-9EEC14635851}</clsid>

<disabled>0</disabled>


-<File>

    <clsid>{50BE44C8-567A-4ed1-B1D0-9234FE1F38AF}</clsid>

    <image>0</image>

    <uid>{18348506-E3DE-4C1E-A2DC-B91087376BC4}</uid>

    <name>default.jpeg</name>

    <disabled>0</disabled>


    -<Properties>

        <fromPath>C:\Users\Administrator\Documents\dragon_ball_kai-goku.jpeg</fromPath>

        <hidden>0</hidden>

        <action>C</action>

       <targetPath>C:\Users\Administrator\Downloads\default.jpeg</targetPath>

       <readOnly>0</readOnly>

       <archive>1</archive>

    </Properties>

    <status>default.jpeg</status>

    <changed>2018-08-14 06:36:56</changed>

</File>


....

但是预期输出是:

<?xml version="1.0" encoding="UTF-8"?>

-<Files disabled="0" clsid="{215B2E53-57CE-475c-80FE-9EEC14635851}">


    -<File disabled="0" clsid="{50BE44C8-567A-4ed1-B1D0-9234FE1F38AF}" uid="{18348506-E3DE-4C1E-A2DC-B91087376BC4}" changed="2018-08-14 06:36:56" image="0" status="default.jpeg" name="default.jpeg">

        <Properties hidden="0" archive="1" readOnly="0" targetPath="C:\Users\Administrator\Downloads\default.jpeg" fromPath="C:\Users\Administrator\Documents\dragon_ball_kai-goku.jpeg" action="C"/>

</File>

1 个答案:

答案 0 :(得分:0)

通过查看XML.toJSONObject方法的文档:

  

将格式正确(但不一定有效)的XML字符串转换为JSONObject。 由于JSON是一种数据格式而XML是一种文档格式,因此在此转换中某些信息可能会丢失。 XML使用元素,属性和内容文本,而JSON使用名称/值对和值数组的无序集合。 JSON不喜欢在元素和属性之间进行区分。相似元素的序列表示为JSONArrays。内容文本可以放置在“内容”成员中。注释,序言,DTD和<[[]]>将被忽略。

由于这种信息丢失,转换回的XML不等于原始XML。

要解决此问题,请改用JSONML.toJSONObject。作为方法的文档:

  

使用JsonML转换将格式正确(但不一定有效)的XML字符串转换为JSONObject。每个XML标记都表示为具有“ tagName”属性的JSONObject。 如果标记具有属性,则属性将在JSONObject中作为属性如果标签包含子项,则该对象将具有“ childNodes”属性,该属性将是字符串和JsonML JSONObjects的数组。注释,序言,DTD和<[[]]>将被忽略。

https://stackoverflow.com/a/44442957/2150220提供了有关JsonML的更多详细信息。

检查以下代码以查找不同的

import org.json.JSONException;
import org.json.JSONML;
import org.json.JSONObject;
import org.json.XML;

public class JsonToXml {
    public static void main(String[] args) throws JSONException {

        String originalXML = "<?xml version=\"1.0\"?><a t=\"tt\"><b><c>1</c><c>2</c></b></a>";
        System.out.println("oringinal XML:" + originalXML);
        JSONObject jsonConvertByXML = XML.toJSONObject(originalXML);
        System.out.println("jsonConvertByXML:" + jsonConvertByXML);

        String xmlConvertedBackByXML = XML.toString(jsonConvertByXML);
        System.out.println("xmlConvertedBackByXML:" + xmlConvertedBackByXML);

        JSONObject jsonConvertByJSONML = JSONML.toJSONObject(originalXML);
        System.out.println(jsonConvertByJSONML);
        String xmlConvertedBackByJSONML = JSONML.toString(jsonConvertByJSONML);
        System.out.println("xmlConvertedBackByJSONML:" + xmlConvertedBackByJSONML);
    }
}