繁体   English   中英

解析带有单引号内的转义引号的JSON时出错

[英]Error parsing JSON with escaped quotes inside single quotes

我有一个变量var jsonData = '{"Key":"query","Value":"dept=\\"Human Resources*\\"","ValueType":"Edm.String"}';

我正在尝试使用JSON.parse(jsonData)解析变量,但是,出现错误“ JSON中位置30处的意外令牌H”。 我无法更改变量的返回方式,因此我对问题的理解如下:

  1. JSON.parse(jsonData)出错,因为它没有将转义的双引号识别为已转义,因为它完全用单引号引起来
  2. jsonData.replace(/\\\\"/g, "\\\\\\\\"")或我尝试过的其他组合都找不到\\"因为javascript将\\"视为"

问题如何通过用JSON.parse()可以处理的内容替换转义的引号或使用其他内容来正确地解析此内容,来正确地解析它? 考虑到它的简单性,我想坚持使用JSON.parse(),但可以使用其他选项。

编辑:不幸的是,我目前不能更改变量,这只是一个较大的JSON响应的小例子。 在授予应用程序访问API的权限之前,这是一个临时解决方案,但在此之前我需要临时解决方案(IT部门可能很慢)。 我现在正在做的事情是通过直接点击API地址来获得较大的JSON响应,浏览器使用用户OAuth的cookie进行身份验证。 然后,我将JSON响应复制并粘贴到我的应用程序中,以便可以处理数据。 响应中充斥着转义的引号,手动编辑文本会很费力,我正在尝试避免在复制到变量之前复制到文本处理器。

您应该在代码中使用另一个反斜杠作为前缀来转义反斜杠字符。 因此,代码变为:

var jsonData = '{"Key":"query","Value":"dept=\\"Human Resources*\\"","ValueType":"Edm.String"}';

第一个反斜杠是这样,以便JS将第二个反斜杠放在字符串中,该字符串必须在字符串中,以便json解析器知道它应该忽略引号字符。

这种情况的不幸之处在于,在JavaScript代码中,

var jsonData = '{"Key":"query","Value":"dept=\\"Human Resources*\\"","ValueType":"Edm.String"}'

var jsonData = '{"Key":"query","Value":"dept="Human Resources*"","ValueType":"Edm.String"}'

您可以将有关JSON的信息硬编码为编程方式。 例如,您可以用$1\\"替换正则表达式([\\[\\{,:]\\s+)\\" ,但是如果字符串Human Resources*也可以以:{,结尾,这将无法工作, 这也可能导致安全问题。

我认为,解决问题的最佳方法是将json响应放在json文件中的某个位置,以便需要使用它的javascript代码可以将其读取为字符串。

我认为您也可以省去代表String对象的初始String:

  1. 使用标准的JSON对象。
  2. 对该对象进行所需的任何更改。
  3. 调用JSON.stringify(YOUR_OBJECT)获得String表示形式。
  4. 然后,当您再次需要一个对象时,请使用JSON.parse(…)

那应该能够满足您的最初请求,提出问题,保留当前(转义的)String值,并给您一些进行大量更改的空间。

要转义当前的String值:

  1. obj["Value"] = 'dept=\\"Human Resources*\\"'

另外,您可以嵌套属性:

  1. obj["Value"]["dept"] = "Human Resources*"

由于其他原因,这可能会有所帮助。

我发现我很少在没有使用上述序列的企业或生产环境中使用JSON(在生产环境中从未使用过纯字符串表示形式),这仅仅是因为修改属性容易,生成动态数据/修改JSON对象,并实际以编程方式使用JSON。

将字符串表示形式用于真正的属性键值对通常会在以后引起头痛(例如,当您要以编程方式读取“ Human Resources*值并使用它时)。

我希望您认为该方法有用!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM