【问题标题】:write jsonobject data to xml tags将jsonobject数据写入xml标签
【发布时间】:2018-08-31 13:53:38
【问题描述】:

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

但是我在某处将 JSONObject 写入 java 中的 xml 文件时出错了。

我正在使用 org.json jar 文件

请问我哪里出错了?

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

我的代码 sn-p:

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>

【问题讨论】:

    标签: java json xml file


    【解决方案1】:

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

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

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

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

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

    site 提供有关 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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多