如何在 Node.js ES6 中解析具有未转义属性的 JSON 字符串



我有以下字符串,其中包含具有未转义属性的JSON,我想在Node.js/ES6中解析它:

const A="{prop1=null, prop2=SOME-VALUE, prop3=[{prop4=2018-04-13T19:07:47.008Z}]}"

如何正确解析它,或者是否有一些 JSON 解析器比 JSON.parse 更安全,因为:

JSON.parse("{prop1=null, prop2=SOME-VALUE, prop3=[{prop4=2018-04-13T19:07:47.008Z}]}")

正在抛出错误:

VM2683:1 Uncaught SyntaxError: Unexpected token p in JSON at position 1
at JSON.parse (<anonymous>)

更新:

这不是从外部系统获取的有效 JSON,无论如何我都想使用一些可能处理此类内容的解析器来解析它,或者转义它的方式(lib(使其成为使用 JSON.parse 后的有效 JSON

这不是JSON,没有JSON解析器能够处理它:

  • JSON 用冒号(而不是等号(将键与值分隔开
  • 作为字符串的 JSON 键和值必须用引号 " 括起来

有许多库能够以松散的方式解析无效的 JSON,例如 loose-json .问题是这个字符串不是 JSON。由于字符串不是有效的 JS,因此也无法对其进行计算。

字符串不能用常规replace处理,因为它遵循某些语法,例如 =分隔符可以替换为 :,作为迈向 JSON 的一步,但包含=字符的值不应受到影响。应首先对字符串进行标记化,并根据预期的语法进行处理。

一些库可能对标记化有所帮助,例如 esprima ( esprima.tokenize() (,但根据特定的文件格式,必须做很多关于不一致的工作:

  • null属性值,解析器应该如何决定它是null还是'null'字符串?

  • 属性值没有用引号括起来,应该如何处理空格?

  • 等。

根据您的更新,您需要编写一个自定义字符串解析器,将源转换为一些有效的 JSON 字符串,然后使用 JSON.parse() - 或者您甚至可以忽略 JSON.parse 方法并根据需要直接创建对象(这将是一个痛苦(。

您可以使用正则表达式或任何字符串操作方法来替换例如将=替换为:等......

最新更新