使用jQuery从JSON字符串中删除键上的引号

12

考虑这个作为我的JSON字符串:

{"Table" : [{"userid" : "11","name" : "KumarP","designation" : "Business Head",
"phone" : "9789234793","email" : "surfingkumar@gmail.com","role" : "Admin",
   "empId" : "EI003","reportingto" : "KumarP"}]}

我想让我的字符串像这样:

{Table:[{ userid: "11", name: "KumarP", designation: "Business Head", 
    phone: "9789234793", email:"surfingkumar@gmail.com", role : "Admin",
       empId : "EI003",reportingto : "KumarP"}]}

我这样做是为了与jlinq一起使用。


你应该使用正则表达式,在“:”之前搜索单词。 - Peter Kiers
你为什么想要这样做? - Hogan
@GenericTypeTea 和 @Hogan,我正在尝试使用像 jlinq 这样的库在客户端过滤我的 JSON 数据。它使用后一种类型的 JSON 字符串 http://www.hugoware.net/Projects/jLinq - ACP
我们在 PHP Symfony 中遇到了相同的问题。json_encode() 引用了 JSON 哈希键,后来 Google Charts https://developers.google.com/chart/interactive/docs/reference#dataparam 出现了 c[qe] is not a function 错误。 - Marcos
2个回答

28

使用正则表达式:

var a='{"Table" : [{"userid" : "11","name" : "KumarP","designation" : "Business Head","phone" : "9789234793","email" : "surfingkumar@gmail.com","role" : "Admin",    "empId" : "EI003","reportingto" : "KumarP"}]}';
a=a.replace(/"(\w+)"\s*:/g, '$1:');
alert(a);

该字符串将变为您的第二个代码块:

{Table: [{userid: "11",name: "KumarP",designation: "Business Head",phone: "9789234793",email: "surfingkumar@gmail.com",role: "Admin",    empId: "EI003",reportingto: "KumarP"}]}

如果标签是一个保留字,那么这难道不会引起问题吗?


如果键或值中有“:”,怎么办?使用JSON解析器将是更安全的方法。 - user113716
@patrick,它不会匹配它们,因为正则表达式指定了双引号和\w+,所以它既不会匹配"my name is: john"也不会匹配"my name is: \"john\": the coder!" - aularon
我猜我不应该那么具体地使用 :。 任何非 \ w 字符都会导致匹配失败。 - user113716
@patrick 这也是我的观点 :)!我不想它匹配内部值!对于键,我知道它不会匹配具有奇怪名称的键,我在我的帖子中说过 但如果标签是保留字,那不会引起问题吗? 顺便说一句,我之前评论中的示例是值的示例,而不是键。 - aularon
是的,你关于值的观点是正确的。不确定为什么我包含了那个。我明白你所说的保留字的意思。更糟糕的是,仅仅去掉键周围的引号(就像OP请求的那样)会将一个有效的JSON字符串变成一个无效的字符串,而不管保留字如何。我认为OP请求一种实现解决方案的方法,而不是修复实际问题。 - user113716

8
如果你手头的是一个JSON字符串,例如:
var obj = '{"Table" : [{"userid" : "11","name" :"KumarP","designation" : "Business Head",\
"phone" : "9789234793","email" : "surfingkumar@gmail.com","role" : "Admin",\
"empId" : "EI003","reportingto" : "KumarP"}]}';

然后你可以使用$.parseJSON()对其进行解析,例如:
var result = $.parseJSON( obj );

这将把你的JSON字符串转换成JavaScript对象/数组。

如果可能,请查看此网址http://www.hugoware.net/Projects/jLinq并查看数据。users。 - ACP
@Pandiya - 我看到了,但是我应该看到什么呢? - user113716
现在看看这个链接:http://stackoverflow.com/questions/3636568/jlinq-doesnt-seem-to-fetch-all-matching-rows-from-my-json-data 我尝试了你说的方法,但它没有过滤我的JSON数据? - ACP
@Pandiya - 我不知道你是如何创建/接收数据的。它实际上是一个JSON字符串吗?如果你创建了一个像这样的对象:var obj = {"hi","there"};,那么引号不会有任何影响。但如果它是一个JSON字符串,比如:var obj = '{"hi","there"}';,那么使用$.parseJSON()将把它转换为第一种版本。你应该以两种方式将你的数据记录到控制台,以查看它是否符合你的预期。 - user113716

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接