xml JSON互转
//xml转json public void parse() { GLog.e("parse xml start"); XmlToJson.Builder builder = new XmlToJson .Builder(readConfigXmlToStr()); //ConfigXmlJsonConstants.FORCE_LIST 为数组的标签,例如option标签 for (String str : ConfigXmlJsonConstants.FORCE_LIST) { builder.forceList(str); } XmlToJson xmlToJson = builder.build(); try { //LocalConfigXml为xml转json相对应的对象 LocalConfigXml mLocalConfigXml = JSON.parseObject(xmlToJson.toJson().toString(), LocalConfigXml.class); } catch (Exception e) { e.printStackTrace(); } GLog.e("parse xml end"); }
//json转xml
public void generate() {
GLog.e("generate xml start");
LocalConfigXml mLocalConfigXml;//json存储的对象
JsonToXml.Builder builder = new JsonToXml.Builder(JSON.toJSONString(mLocalConfigXml));
//GenerateForceAttributeUtils.getInstance().getForceAttribute()为属性值标签路径list
for (String str : GenerateForceAttributeUtils.getInstance().getForceAttribute()) {
builder.forceAttribute(str);
}
//GenerateForceAttributeUtils.getInstance().getForceAttribute()为内容标签路径list
for (String str : GenerateForceAttributeUtils.getInstance().getForceContent()) {
builder.forceContent(str);
}
JsonToXml jsonToXml = builder.build();
writeConfigStrToXml(jsonToXml.toFormattedString());
GLog.e("generate xml end");
}
private String readConfigXmlToStr() {
String xmlStr = "";
FileInputStream input = null;
try {
input = new FileInputStream(new File(LocalConfigXmlConstants.CONFIG_XML_PATH));
int length = input.available();
byte[] buffer = new byte[length];
input.read(buffer);
xmlStr = new String(buffer);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != input) {
input.close();
}
} catch (Exception e) {
}
}
return xmlStr;
}
public static void writeConfigStrToXml(String content) {
FileWriter writer = null;
File file = new File(LocalConfigXmlConstants.CONFIG_XML_PATH);
try {
if (file.exists()) {
file.delete();
}
file.createNewFile();
writer = new FileWriter(file, true);
writer.write(content);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != writer) {
writer.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意:
1、以上需要用到两个库
implementation 'com.github.smart-fun:XmlToJson:1.4.5' //参考 https://github.com/smart-fun/XmlToJson
api files('libs/fastjson-1.2.6.jar') //fastjson库
2、LocalConfigXml //为了保证解析和生成xml的标签不同顺序,json对象需要设置顺序值
ordinal 标签顺序值,name标签的实际名称
public class Parse {
@JSONField(ordinal = 1, name = "common")
private String common;
@JSONField(ordinal = 2, name = "solutions")
private String solutions;
}