我正在使用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"?是否有可以使这变得容易的正则表达式?
foo: "fooValue"
"foo":"fooValue"
提前致谢!
编辑 -首先要指出的是,这不是可以使用正则表达式解决的问题。
区分作为序列化形式的JSON表示法和JavaScript对象常量表示法很重要。
这个:
{ x: "hello" }
是一个完全有效的JavaScript值(一个表达式片段),因此:
var y = { x: "hello" };
与您完全相同的结果:
var y = { "x": "hello" };
换句话说,在任何一种情况下,“ y”的值将完全相同。完全相同,以致无法分辨出这两个常数中的哪一个用于初始化“ y”。
现在,如果要执行的操作是将包含JavaScript样式“ JSON简写” 的 字符串( 不带引号)转换为有效的JSON,则唯一要做的就是解析它,并在属性名称周围用引号将字符串重新构建。也就是说,您将不得不编写自己的“轻松” JSON解析器,以应付未加引号的标识符作为属性名称,或者必须找到可以处理这种宽松语法的现成解析器。
在您的情况下,看起来好像一旦有了“松弛”解析器,就可以完成。您应该不需要翻译。值得庆幸的是,您的“无效” JSON响应完全可以由JavaScript本身解释,因此,如果您信任数据源(那是一个 很大的 “ if”),则应该可以使用“ eval()”对其进行评估。