この関数を使用してXMLファイルを解析しています。
function xmlToJson(xml) {
var attr, child, attrs = xml.attributes,
children = xml.childNodes,
key = xml.nodeType,
obj = {},
i = -1,
o = 0;
if (key == 1 && attrs.length) {
obj[key = o] = {};
while (attr = attrs.item(++i)) {
obj[key][attr.nodeName] = attr.nodeValue;
}
i = -1;
} else if (key == 3) {
obj = xml.nodeValue;
}
while (child = children.item(++i)) {
key = child.nodeName;
if (obj.hasOwnProperty(key)) {
if (obj.toString.call(obj[key]) != '[object Array]') {
obj[key] = [obj[key]];
}
obj[key].push(xmlToJson(child));
} else {
obj[key] = xmlToJson(child);
}
}
return obj;
}
次のファイルを解析すると、次の文字列が生成されます(JSON.stringifyを使用して表示)。
ファイル(コンテンツが表示されないため、「<」文字は含まれていませんが、私のファイルには明らかにそれらがあります):
?xml version="1.0" encoding="UTF-8" standalone="no"?>
playlist>
vid src="video/intro.mp4" type="video/mp4"/>
vid src="video/intro.mp4" type="video/mp4"/>
/playlist>
JSON:
{"playlist":{"#text":["\n","\n","\n"],"vid":[{"0":{"src":"video/intro.mp4","type":"video/mp4"}},{"0":{"src":"video/intro.mp4","type":"video/mp4"}}]}}
しかし、出力は次のようにする必要があります。
[{"0":{"src":"video/intro.mp4","type":"video/mp4"}},{"0":{"src":"video/intro.mp4","type":"video/mp4"}}]
noobの質問で申し訳ありませんが、私はJSONと同じくらいJSに慣れていません。彼らと一緒にいる日数は、片方の手の指で数えることができます。
前もって感謝します。
編集:解決済み-自分で解決:オブジェクトを文字列に変換できないようにするのではなく、変換して「サブストリング」してから、残りの文字列を再変換することにしました。結果は次のとおりです。
JSON.parse(JSON.stringify(jsonPlaylist).substring(44,JSON.stringify(jsonPlaylist).length-2));
それjsonPlaylist
が、解析されたXMLファイル全体を含む文字列varであると仮定します。