一尘不染

正则表达式可在JavaScript中的键周围添加双引号

json

我正在使用jQuery的getJSON函数发出请求并处理JSON响应。问题是我返回的响应格式错误,无法更改。响应如下所示:

{
    aNumber: 200,    
    someText: '\'hello\' world',
    anObject: {
        'foo': 'fooValue',
        'bar': '10.0'
    } 
}

要成为有效的JSON,它应如下所示:

{
    "aNumber": 200,    
    "someText": "'hello' world",
    "anObject": {
        "foo": "fooValue",
        "bar": "10.0"
    } 
}

我想将返回的文本更改为有效的JSON对象。我已经使用JavaScript
replace函数将单引号转换为双引号,将转义的单引号转换为单引号,但是现在我仍然想方设法找出在键值周围添加引号的最佳方法。

例如,我将如何更改foo: "fooValue""foo":"fooValue"?是否有可以使这变得容易的正则表达式?

提前致谢!


阅读 255

收藏
2020-07-27

共1个答案

一尘不染

编辑 -首先要指出的是,这不是可以使用正则表达式解决的问题。

区分作为序列化形式的JSON表示法和JavaScript对象常量表示法很重要。

这个:

{ x: "hello" }

是一个完全有效的JavaScript值(一个表达式片段),因此:

var y = { x: "hello" };

与您完全相同的结果:

var y = { "x": "hello" };

换句话说,在任何一种情况下,“ y”的值将完全相同。完全相同,以致无法分辨出这两个常数中的哪一个用于初始化“ y”。

现在,如果要执行的操作是将包含JavaScript样式“ JSON简写” 的 字符串(
不带引号)转换为有效的JSON,则唯一要做的就是解析它,并在属性名称周围用引号将字符串重新构建。也就是说,您将不得不编写自己的“轻松”
JSON解析器,以应付未加引号的标识符作为属性名称,或者必须找到可以处理这种宽松语法的现成解析器。

在您的情况下,看起来好像一旦有了“松弛”解析器,就可以完成。您应该不需要翻译。值得庆幸的是,您的“无效”
JSON响应完全可以由JavaScript本身解释,因此,如果您信任数据源(那是一个 很大的 “ if”),则应该可以使用“
eval()”对其进行评估。

2020-07-27