我正在从 API 接收一些数据
{
"id": 1,
"name": "Merc",
"content": "{\n\t\t\"1\": {\n\t\t\t\"topicId\": 1,\n\t\t\t\"topicName\": \"Project Overview\",\n\t\t\t\"topicIcon\": \"icon1\",\n\t\t\t\"topicContent\": \"<h1 class=\\\"ql-align-center\\\">Heading</h1><h2 class=\\\"ql-align-center\\\">Content1SubHeading</h2><p class=\\\"ql-align-center\\\"><strong style=\\\"color: rgb(230, 0, 0);\\\"><em><u>Subject</u></em></strong></p><p class=\\\"ql-align-center\\\"><strong style=\\\"background-color: rgb(255, 255, 0);\\\"><em><u>Content</u></em></strong></p><p class=\\\"ql-align-center\\\"><span class=\\\"ql-font-serif\\\">Font Check</span></p><ol><li><span class=\\\"ql-font-serif\\\">One</span></li><li><span class=\\\"ql-font-serif\\\">two</span></li></ol><ul><li><span class=\\\"ql-font-serif\\\">Bullet1</span></li><li><span class=\\\"ql-font-serif\\\">Bullet2</span></li></ul><p>",
"hierarchy": "[\r\n {\r\n \"topicId\": 1,\r\n \"topicName\": \"Project Overview\",\r\n \"topicIcon\": \"T1 icon\",\r\n \"children\": [\r\n {\r\n \"topicId\": 4,\r\n \"topicName\": \"Introduction\",\r\n \"topicIcon\": \"T4 icon\"\r\n },\r\n {\r\n \"topicId\": 5,\r\n \"topicName\": \"Additional\",\r\n \"topicIcon\": \"T5 icon\",\r\n \"children\": [\r\n {\r\n \"topicId\": 6,\r\n \"topicName\": \"Requests\",\r\n \"topicIcon\": \"T6 icon\"\r\n },\r\n {\r\n \"topicId\": 7,\r\n \"topicName\": \"Performing\",\r\n \"topicIcon\": \"T7 icon\",\r\n \"children\": [\r\n {\r\n \"topicId\": 8,\r\n \"topicName\": \"Landing Page\",\r\n \"topicIcon\": \"T8 icon\"\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n \"topicId\": 2,\r\n \"topicName\": \"Questionnaire\",\r\n \"topicIcon\": \"T2 icon\",\r\n \"children\": [\r\n {\r\n \"topicId\": 9,\r\n \"topicName\": \"Reports\",\r\n \"topicIcon\": \"T9 icon\"\r\n },\r\n {\r\n \"topicId\": 10,\r\n \"topicName\": \"Workflow Details\",\r\n \"topicIcon\": \"T10 icon\"\r\n }\r\n ]\r\n }\r\n ]"
这个回复看起来很奇怪,我需要摆脱这个 从内容和 \ 许多其他斜线
我尝试使用
replace(/\\n/g, '')
和JSON.stringify(JSON.parse(<json object>))
但没有用
TLDR: 您不需要删除
\n
和 \r
字符。它们用于表示字符串类型属性内的 json 内容。
“hierarchy”属性的 json 类型是 string。由于特定属性的值是多行 json 定义,因此通常会看到原始 json 的换行符和制表符表示为转义序列 (
\n
、\t
、\r
)。
现在,如果您尝试将上面的字符串按原样粘贴到某些 javascript 代码中,请记住,为了提供实际的字符串值(例如,在“hierarchy”属性内),您将需要从以下位置读取完整的 json文件或将其包含在“String.raw”中。否则,您将需要使用额外的
\
字符进一步转义它。这是因为 \n
、\t
和 \r
在 javascript 中已经具有特殊含义。 (有关 json 换行符的更多信息并避免混淆请参阅这篇文章)。
所以尝试在浏览器的开发控制台中粘贴下面的代码
(它使用
String.raw
,使得
\n
、
\t
、
\r
在JavaScript方面没有特殊含义)(F12
)您将看到 hierarchy
属性中包含的 json 已被正确解析为对象数组。
JSON.parse(
JSON.parse(
String.raw`{
"id": 1,
"name": "Merc",
"hierarchy": "[\r\n {\r\n \"topicId\": 1,\r\n \"topicName\": \"Project Overview\",\r\n \"topicIcon\": \"T1 icon\",\r\n \"children\": [\r\n {\r\n \"topicId\": 4,\r\n \"topicName\": \"Introduction\",\r\n \"topicIcon\": \"T4 icon\"\r\n },\r\n {\r\n \"topicId\": 5,\r\n \"topicName\": \"Additional\",\r\n \"topicIcon\": \"T5 icon\",\r\n \"children\": [\r\n {\r\n \"topicId\": 6,\r\n \"topicName\": \"Requests\",\r\n \"topicIcon\": \"T6 icon\"\r\n },\r\n {\r\n \"topicId\": 7,\r\n \"topicName\": \"Performing\",\r\n \"topicIcon\": \"T7 icon\",\r\n \"children\": [\r\n {\r\n \"topicId\": 8,\r\n \"topicName\": \"Landing Page\",\r\n \"topicIcon\": \"T8 icon\"\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n \"topicId\": 2,\r\n \"topicName\": \"Questionnaire\",\r\n \"topicIcon\": \"T2 icon\",\r\n \"children\": [\r\n {\r\n \"topicId\": 9,\r\n \"topicName\": \"Reports\",\r\n \"topicIcon\": \"T9 icon\"\r\n },\r\n {\r\n \"topicId\": 10,\r\n \"topicName\": \"Workflow Details\",\r\n \"topicIcon\": \"T10 icon\"\r\n }\r\n ]\r\n }\r\n ]"}`
).hierarchy);
注意:我猜你没有粘贴整个json,因为
content
属性内有一些未闭合的括号。为了简单起见,我完全删除了特定属性以避免解析错误,但仍然演示了该方法。
注2: 如果直接从收到的响应中解析,则不需要
String.raw
。我在这里使用它来提供解析填充在字符串属性内的嵌套 json 的简单复制/粘贴演示。
Note3: 值得一提的是,
content
属性是用linux换行符(\n
)设置的,hierarchy
属性是用windows换行符(\r\n
)设置的,没有制表符。答案可能是每个属性的源都是两个不同的文件。例如一个在 Windows 中创建,一个在 Linux 中创建。
您的正则表达式是错误的,我可以使用以下方法删除它们:
YourJsonStringVar.replace(/[\n\r]/g, '')
用途:
const jsonString = '{"name": "abc", "id": 30, "content": "123 abc St\nxyz, zzz\r10001"}';
const cleanedString = jsonString.replace(/[\n\r]/g, '');
console.log(cleanedString);
说明:
[ ]: 方括号表示字符类。括号内的任何字符都将被匹配。
和 : 转义序列 ' ' 和 ' ' 分别代表换行符和回车符。
g 修饰符: 'g' 修饰符用于执行全局搜索,这意味着它将匹配字符串中出现的所有模式。