描述字段是一个文本区域字段,用户最终以某种方式在其中带有一些奇怪的小符号。 (参见图片)
当我从服务器上获取该数据时,我将从获取的对象中收集数据,包括对该对象的描述,并将其转换为JSON字符串,然后将其发送到我的javascript中。
从javascript,我进行JSON.parse。但是那个奇怪的小符号会导致解析失败。但是,当您查看它时,那里没有任何字符,但是它在JSON.parse中引发了未定义的字符。
我在服务器上的回复如下所示:
"blahblahtesttext\r\nslkdjf",
除了期望的\ r \ n ......
但是该符号所在的位置有一个意外的令牌。
{"value":"blah blah test text//Symbol should be here, but there is nothing and it forces it to the next line
\r\nslkdjf","fieldType":"TEXTAREA","field":"Description"}
该符号将字符串强制移至下一行,从而引起问题。
因为我看不到实际字符是什么...我不知道该如何处理。
是否有一些东西可以去除JSON字符串中的无效字符,以便进行解析?我不想只是尝试/抓住它,因为它会丢掉所有东西,我只想删除那个奇怪的无效符号。
还是有办法查看JSON.parse不喜欢的实际字符是什么?
<-如果要尝试解析它,这是用于复制粘贴到字符串中的符号。
编辑:
我发现它是在Notepad ++中完成的
在哪里可以看到行分隔符所在的位置,它将实际的回车符和换行符放置在此处,从而中断了字符串。对于在该行分隔符后面的实际文本区域中放置的两个返回,它已经具有\ r \ n \ r \ n。
但是仍然不确定如何处理,因为回车符和换行符不会在字符串中显示为'\ n \ r',因此它们没有字符表示,而是实际上在其中放了一个回车符并断开字符串。
新编辑:
最后找到了一些可以使它起作用的方法。我无法对该行分隔符进行替换。当我从数据库中提取它时,它作为隐藏的回车符来传递。当您在文本区域中手动按下“ Enter”键时,我从数据库中获得的字符串实际上会在其中放置“ \ r \ n”。但是行分隔符没有。
因此,我在解析之前添加了这三行,以确保转义任何无效的新行/回车符。
result = result.replace(/\r\n/g, '\\r\\n');
result = result.replace(/\r/g, '\\r');
result = result.replace(/\n/g, '\\n');
实际上字符串中的'\ r \ n'已经被正确地转义了,这使我绊倒了,因为在有人尝试引入此行分隔符之前,我不必担心将它们转义。...>
答案 0 :(得分:2)
正如Xufox所说,这似乎是U+2028。 JSON.parse
应该不会失败,因为U + 2028不需要在JSON中转义。 Chrome没有,但是那可能是因为它正在实现this stage 4 proposal Xufox pointed out:
const o = {prop: "testing\u2028one two three"};
console.log(JSON.parse(JSON.stringify(o)));
如果您需要解决无法处理的JSON.parse
实现,则可以执行以下操作:
str = str.replace(/\u2028/g, "\\u2028");
...在JSON.parse
上运行str
之前。