【问题标题】:Removing extra brackets and data from JSON object - Javascript从 JSON 对象中删除额外的括号和数据 - Javascript
【发布时间】:2012-08-07 10:47:42
【问题描述】:

我正在用这个函数解析一个 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。

【问题讨论】:

    标签: javascript xml json parsing xml-parsing


    【解决方案1】:

    php:

    $yourxmlstring = rtrim(ltrim($yourxmlstring, '{"playlist":{"#text":["\n","\n","\n"],"vid":'),"}}");
    

    基本上我所做的就是使用ltrimrtrim 来砍掉你不想要的东西。

    js:

    str.replace(/{"playlist":{"#text":\["\\n","\\n","\\n"\],"vid":/,'').replace(/}+$/,'');
    

    【讨论】:

    • 是的,我想过类似的事情,但它需要我将 JSON 对象转换为字符串。事实是我需要 JSON 对象保持这种状态,一个 JSON 对象(我只是使用 JSON.stringify 来显示输出并检查它是否正确),以便我以后可以使用它。因此,我无法将其转换为字符串。
    • 我猜你现在已经想通了,stringify, replace, parse > use :)
    猜你喜欢
    • 2017-05-18
    • 1970-01-01
    • 2014-11-19
    • 2012-02-29
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    相关资源
    最近更新 更多