我有一个JSON如下
String str = {'Emp name' : 'JSON','Emp id' : 1,'Salary' : 20997.00}
我想使用java将这个JSON转换为XML。我的java代码就在这里。
JSON json= JSONSerializer.toJSON(str);
XMLSerializer xmlSerializer = new XMLSerializer();
//To Skip the white space from XML data and not from XML Element (By default it does)
xmlSerializer.setSkipWhitespace(true);
//To set type of xml element If it true, it will be type
xmlSerializer.setTypeHintsCompatibility(true);
xmlSerializer.setRootName("book");
String xml = xmlSerializer.write( json );
System.out.println(xml);
如果我在XML元素之间没有任何空格传递xml(即Empname名称为Empname,Emp id为Empid),我将获得输出。我想从XML元素中删除空格,而不是从XML元素内容中删除。
答案 0 :(得分:2)
我反编译并检查了json-lib(2.4)和xom(1.2.5)图书馆。不幸的是,没有关于密钥的这样的前/后处理器或处理程序。 这既适用于构造JSON,也适用于构建XML。
似乎没有其他方法可以手动修复JSON的密钥。请查看下面的代码段:
CURLOPT_SSL_CIPHER_LIST
输出如下:
public static void main(String[] args) {
String str = "{'Emp name' : 'JSON','Emp id' : 1,'Salary' : 20997.00, " +
"'manager' : {'first name':'hasan', 'last name' : 'kahraman'}," +
"'co workers': [{'first name':'john', 'last name' : 'wick'}, " +
"{'first name':'albert', 'last name' : 'smith'}]}";
JsonConfig config = new JsonConfig();
JSON json = JSONSerializer.toJSON(str, config);
fixJsonKey(json);
XMLSerializer xmlSerializer = new XMLSerializer();
//To Skip the white space from XML data and not from XML Element (By default it does)
xmlSerializer.setSkipWhitespace(true);
//To set type of xml element If it true, it will be type
xmlSerializer.setTypeHintsCompatibility(true);
xmlSerializer.setRootName("book");
String xml = xmlSerializer.write(json);
System.out.println(xml);
}
private static void fixJsonKey(Object json) {
if (json instanceof JSONObject) {
JSONObject jsonObject = (JSONObject) json;
List<String> keyList = new LinkedList<String>(jsonObject.keySet());
for (String key : keyList) {
if (!key.matches(".*[\\s\t\n]+.*")) {
Object value = jsonObject.get(key);
fixJsonKey(value);
continue;
}
Object value = jsonObject.remove(key);
String newKey = key.replaceAll("[\\s\t\n]", "");
fixJsonKey(value);
jsonObject.accumulate(newKey, value);
}
} else if (json instanceof JSONArray) {
for (Object aJsonArray : (JSONArray) json) {
fixJsonKey(aJsonArray);
}
}
}
答案 1 :(得分:1)
如果您可以切换JSON框架和/或添加另一个框架,请查看Jackson。您的问题的简单解决方案是DTO(数据传输对象):
class Employee {
private String name;
@JsonProperty("Emp name")
public String getname() { return name; }
...setter...
}