用于清理无效JSON的正则表达式

时间:2015-11-18 09:53:09

标签: javascript json regex

我必须使用返回无效JSON的API:

{
    "data": [
        {
            "tags": [
                {
                    "t": "DefaultKPI",
                    d: "Some default KPI parameters",
                    cv: 6.0000000000000000,
                    cvS: "6.000",
                    ct: 0,
                    tv: "",
                    tvS: "NaN",
                    u: "",
                    s: 0,
                    gmax: "",
                    gmaxS: "NaN",
                    gmin: "",
                    gminS: "NaN",
                    hhh: "",
                    hhhS: "NaN",
                    hh: "",
                    hhS: "NaN",
                    h: "",
                    hS: "NaN",
                    l: "",
                    lS: "NaN",
                    ll: "",
                    llS: "NaN",
                    lll: "",
                    lllS: "NaN",
                    up: ""
                }
            ]
        }
    ]
}

正如您所看到的,名称并不总是被引号括起来。 我想创建一个JS函数来添加它们,这意味着选择它们来检查是否有引号,如果没有,则添加它们。

我是regex的新手,所以我在regex101上尝试了一段时间,但我很难搞清楚。

到目前为止我所拥有的是

/(,.*?:)/

匹配

,d:

我从教程中了解到

/(,.*?:)+/

会全部选择它们,但它不起作用。

此外,我想从匹配中删除分隔符(例如,我之前的示例应该返回

d

这将使我的生活在替换部分更容易,但我无法弄清楚如何做到这一点。

2 个答案:

答案 0 :(得分:0)

如果它解析为JS(并且这样做),那么抓住你的鼻子并使用eval。当您的代码未能通过审核时,请告诉您的老板,在服务器人员站起来并给您正确的JSON时,您将摆脱eval

请记住,您必须将它括在括号中,或者在开头添加var foo =,这样JS就不会感到困惑,并认为领先的{会阻止它。< / p>

现在希望并祈祷服务器向导不要找到一种方法来给你一些东西,这种东西在某种程度上被打破,即使eval也无法处理它。

答案 1 :(得分:-2)

您可以使用JSON.stringify方法代替正则表达式。

jsfiddle