如何将所有JSON行输出到一个XML输出中?我的代码仅输出第一行JSON。
我有一个数据文件,其中包含几条JSON行(每条JSON行的末尾都有CR和LF):
{"valueName":"GPS_latitude","valueType":"-1","value":"39.26842508","objectID":"charger_80","timestamp":"1556841594000"}
{"valueName":"GPS_longitude","valueType":"-1","value":"-76.60410104","objectID":"charger_80","timestamp":"1556841594000"}
{"valueName":"GPS_altitude","valueType":"-1","value":"13","objectID":"charger_80","timestamp":"1556841594000"}
我的java src看起来像:
import org.json.JSONObject;
import org.json.XML;
//Reads in the file and makes it one big string (which works correctly)
String jsonData = readFile("testfilePD.json");
//Converts the JSON string into XML but stops after first line.
String jsonBody = Convert_JSON_TO_XML.convert_json(jsonData); System.out.println(jsonBody);
//I'm using the XML library to convert
public static String convert_json(String json_value) {
String xml = "<node>";
try {
JSONObject jsoObject = new JSONObject(json_value);
xml = xml + XML.toString(jsoObject);
} catch (Exception e) {
System.out.println(e);
}
xml = xml + "</node>";
return xml;
}
或者,是否有更好的JSON到XML转换库?或者,如何修改XML库以读取我的整个文件,并将其正确输出到一个大XML文件中。我最终将这个xml文件发送到Web服务API进行提取。我被卡住了。
输出应类似于:
<?xml version="1.0"?>
<node>
<valueName>GPS_latitude</valueName>
<valueType>-1</valueType>
<value>39.26842508</value>
<objectID>charger_80</objectID>
<timestamp>1556841594000</timestamp>
</node>
<node>
<valueName>GPS_longitude</valueName>
<valueType>-1</valueType>
<value>-76.60410104</value>
<objectID>charger_80</objectID>
<timestamp>1556841594000</timestamp>
</node>
答案 0 :(得分:2)
这应该可以解决您的问题:
import org.json.JSONArray;
import org.json.JSONTokener;
import org.json.XML;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
public class ConvertExample {
public static void main(String[] args) throws IOException {
JSONTokener tokener = new JSONTokener(Files.newInputStream(Paths.get("test.json")));
JSONArray array = new JSONArray();
while(tokener.nextClean() != '\u0000'){
tokener.back();
array.put(tokener.nextValue());
}
// Print XML with each array entry named node
System.out.println(XML.toString(array, "node"));
}
}
已更新有关更新的问题 此处使用JSONTokener对其进行标记。循环检查令牌生成器是否在文件末尾,如果不是,则退后一步(未读取字符)并解析下一个值
答案 1 :(得分:0)
该文件不是JSON文件,因此不能使用new JSONObject(json_value)
,其中json_value
是文件的全部内容。
该文件是JSON文本的列表,每行一个,因此您需要分别读取每一行,例如使用BufferedReader
,并分别解析每行,生成JSONObject[]
。
然后您需要确定每个单独的JSON文本是否成为单独的根XML元素,或者是否将XML组合在一起。
更新:要读取并转换为XML,您可以这样做:
StringBuilder buf = new StringBuilder();
Files.lines(Paths.get("testfilePD.json")).forEach(line -> {
JSONObject jsoObject = new JSONObject(line);
buf.append(XML.toString(jsoObject, "node"))
.append(System.lineSeparator());
});
System.out.println(buf.toString());
输出
<node><valueName>GPS_latitude</valueName><valueType>-1</valueType><value>39.26842508</value><objectID>charger_80</objectID><timestamp>1556841594000</timestamp></node>
<node><valueName>GPS_longitude</valueName><valueType>-1</valueType><value>-76.60410104</value><objectID>charger_80</objectID><timestamp>1556841594000</timestamp></node>
<node><valueName>GPS_altitude</valueName><valueType>-1</valueType><value>13</value><objectID>charger_80</objectID><timestamp>1556841594000</timestamp></node>
请注意,生成的XML与原始JSON一样无效,因为两者都有多个根元素/对象。