我正在尝试将XML转换为JSON。我正面临挑战我的xml将@attributes名称改为"值"在所有标签。虽然转换为xml到JSON我使用下面的代码。
var xml = "<Message><id value="123"></id><type value="Test"></type></Message>"
var json = XMLtoJSON(xml, ["type", "space", "xmlns", "html"]);
var result = JSON.stringify(json)
function XMLtoJSON(xml, ignored) {
var r, children = xml.*, attributes = xml.@*, length = children.length();
if(length == 0) {
r = xml.toString();
} else if(length == 1) {
var text = xml.text().toString();
if(text) {
r = text;
}
}
if(r == undefined) {
r = {};
for each (var child in children) {
var name = child.localName();
var json = XMLtoJSON(child, ignored);
var value = r[name];
if(value) {
if(value.length) {
value.push(json);
} else {
r[name] = [value, json]
}
} else {
r[name] = json;
}
}
}
if(attributes.length()) {
var a = {}, c = 0;
for each (var attribute in attributes) {
var name = attribute.localName();
if(ignored && ignored.indexOf(name) == -1) {
a["_" + name] = attribute.toString();
c ++;
}
}
if(c) {
if(r) a._ = r;
return a;
}
}
return r;
}
输入XML:
<Message><id value="123"></id><type value="Test"></type></Message>
实际输出:
{"id":{"_value":"123"},"type":{"_value":"Test"}}
预期产出:
{"id":"123","type":"Test"}
指导我缺少部分以获得预期的输出。
此致 nkn1189
答案 0 :(得分:0)
你认为如果这样做会对你有用吗?
将该解析器的实际输出放到此函数中:
Session
因此,对于您的数组,将convertToExpectedOutput改为这样,它将给出预期的结果:
function convertToExpectedOutput(obj){
var result = {}
for (var i in obj){
if (i == "_value")
return obj[i];
else
result[i] = convertToExpectedOutput(obj[i])
}
return result;
}
convertToExpectedOutput(actualOutput)