我想从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>
答案 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);
}
}