如何在Node.js ES6

时间:2018-04-13 19:31:11

标签: javascript json node.js parsing ecmascript-6

我有以下包含带有未转义属性的JSON的String,我想在Node.js / ES6中解析它:

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

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

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

3 个答案:

答案 0 :(得分:0)

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

  • JSON使用冒号分隔键与值,而不是等号
  • 作为字符串的JSON键和值必须用引号&#34;&#34;
  • 包围

答案 1 :(得分:0)

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

您可以使用正则表达式或任何字符串操作方法replace,例如=:等等......

答案 2 :(得分:0)

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

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

某些库可能对标记化有帮助,例如esprimaesprima.tokenize()),但是根据特定的文件格式,必须完成大量关于不一致的工作:

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

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