我正在使用此函数解析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"}}]
很抱歉,如果没有问题,但我对JS和JSON一样陌生,我和他们在一起的日子可以用我的一只手的手指计算。
提前致谢。
编辑:已解决 - 由我自己解决:我决定将其转换为“子串”,然后重新转换剩余的字符串,而不是粗鲁不允许将对象转换为字符串。这是结果:
JSON.parse(JSON.stringify(jsonPlaylist).substring(44,JSON.stringify(jsonPlaylist).length-2));
假设jsonPlaylist
是包含整个解析的XML文件的字符串var。
答案 0 :(得分:1)
在php
:
$yourxmlstring = rtrim(ltrim($yourxmlstring, '{"playlist":{"#text":["\n","\n","\n"],"vid":'),"}}");
基本上我所做的就是使用ltrim
和rtrim
来切断你不想要的东西。
在js
:
str.replace(/{"playlist":{"#text":\["\\n","\\n","\\n"\],"vid":/,'').replace(/}+$/,'');