JavaScript 对象删除 人物

问题描述 投票:0回答:2

我正在从 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>))
但没有用

javascript json
2个回答
0
投票

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 中创建。


-1
投票

您的正则表达式是错误的,我可以使用以下方法删除它们:

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' 修饰符用于执行全局搜索,这意味着它将匹配字符串中出现的所有模式。

© www.soinside.com 2019 - 2024. All rights reserved.