【问题标题】:How to remove special characters before JSON.parse() while file reading文件读取时如何在 JSON.parse() 之前删除特殊字符
【发布时间】:2018-10-13 05:06:51
【问题描述】:

我在来自第三方的文件夹中有一个json,我无法控制json 数据,只是我需要parse 并对其进行操作。

有时我会收到此错误:

未捕获的 SyntaxError:JSON 输入意外结束 在 JSON.parse 中

json 是有效的 json,但由于某些特殊字符,我得到了上述错误:

R:\30-09-18\LTP\p

有时我会遇到解析错误:

无法解析............

问题:如何删除所有特殊字符,以便JSON.parse(data); 不会抛出任何error

这是我正在尝试的:

var fs = require('fs');
var path = require('path');
var fileLoc = path.join(__dirname,'file.json');
var content = fs.readFileSync(fileLoc,'utf8');
content = JSON.parse(filecontent);  // error occurs here

请帮我提前谢谢!!!

【问题讨论】:

  • 您确定JSON 字符串有效吗?
  • @vibhor1997a,我 100% 确定 json 是有效的,我已签入 json lintBUT 包含一些特殊字符。
  • 什么是特殊字符?有样品吗?
  • @MiladAghamohammadi,有时会有所不同R:\30-09-18\LTP\p 这会导致意外结束输入等等
  • 好吧,这有点不清楚,因为我们需要查看整个 Json。我的意思是,如果它在 JSON 中,你发布的内容似乎没问题。

标签: javascript node.js json


【解决方案1】:

这是我替换保留它们的特殊字符的解决方法

const replacer = str => ({
  '\t': '\\t',
  '\n': '\\n',
  '\b': '\\b',
  '\r': '\\r',
  '\f': '\\f',
  '\\': '\\\\',
  '': '\\\\'
}[str]);

const regEx = new RegExp('\\\\|\t|\n|\b|\r|\f', 'g');

const replacedText = text.replace(regEx, replacer);
const object = JSON.parse(replacedText);

我无法管理的唯一角色是\"

【讨论】:

    【解决方案2】:

    这是你的解决方案

    var fs = require('fs');
    var path = require('path');
    var fileLoc = path.join(__dirname,'file.json');
    var content = fs.readFileSync(fileLoc,'utf8');
    content = content.replace(/\\/g, '\\\\')
    content = JSON.parse(filecontent);
    

    当您要解析包含反斜杠字符的字符串时,您应该将每个反斜杠更改为两个反斜杠。下面是在 chrome 浏览器的控制台选项卡中运行的示例

    content = '{"path":"R:\\30-09-18\\LTP\\p"}'
    JSON.parse(content)
    VM835:1 Uncaught SyntaxError: Unexpected number in JSON at position 12
        at JSON.parse (<anonymous>)
        at <anonymous>:1:6
    (anonymous) @ VM834:1
    content = content.replace(/\\/g, '\\\\')
    "{"path":"R:\\30-09-18\\LTP\\p"}"
    JSON.parse(content)
    //result is {path: "R:\30-09-18\LTP\p"}
    

    【讨论】:

    • 这就是我在这里问的如何​​动态删除它们而不会陷入上述错误
    • (/[!@#$^&%*()+=[]]/g, '') 这些是特殊字符,您需要在代码中对其进行硬编码。 “动态删除它们”是什么意思? ..您无法控制该 json,您需要按照我或 Milad 的说明进行解析。你期待什么?
    • 如果您的空间字符是反斜杠,content = content.replace(/\\/g, '\\\\') line in answer 是您的解决方案。
    • 你的错误是在解析过程中,对吧?解析前一行,使用content = content.replace(/\\/g, '\\\\')
    猜你喜欢
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 2021-12-08
    • 2019-06-16
    • 2015-03-12
    • 2018-05-31
    相关资源
    最近更新 更多