gpt4 book ai didi

javascript - 将引号转义为 JSON 来解析只读字符串

转载 作者:行者123 更新时间:2023-11-30 16:18:05 28 4
gpt4 key购买 nike

我的问题的标题可能有点令人困惑,所以我会尽量解释我的情况:

从外部源(在本例中为 Web Socket 连接),我收到一个 JSON 字符串,需要将其解析为 JavaScript 中的对象。我有可能修改字符串在外部源中的构建方式。我知道有几种解析选项,比如使用 jQuery、eval()(并不总是推荐)等...在这种情况下,我只使用 JSON.parse() 因为它似乎工作得很好。

今天我遇到了一个问题,双引号在字符串中被转义了。举个例子:

var readonly = '{"nam":"jso\"n"}';

假设 readonly 是从外部源接收的字符串(顾名思义,我无法修改字符串在这一层的格式化方式)。这实际上是有效的 JSON,我真的没有理由向外部源的开发人员提示他们应该修改他们的。现在我想将这个字符串解析为一个对象。如前所述,我为此使用 JSON.parse():

var my_object = JSON.parse(readonly);

不幸的是,这失败了,浏览器的控制台抛出一条错误消息。

经过研究,我发现我需要添加另一个反斜杠来转义双引号才能使其正常工作。所以我需要找到一种方法将 readonly 字符串更改为:

'{"nam":"jso\\"n"}'

我现在的问题是:如何将这些额外的反斜杠添加到我事先不知道其内容的字符串?

编辑:根据评论,这里有一些额外的信息:我实际上收到了一个字符串,其中包含的不仅仅是 json。固定数量的字符在 json 的前面和后面。这可能是一个例子:

'xxxx{"nam":"jso\"n"}xxxxxx'

我使用 substring 从该字符串中提取实际的 json。

最佳答案

字符串不正确 - 需要双重转义。

var readonly = '{"nam":"jso\\"n"}';
^^

请记住,您将此字符串定义为 javascsript 字符串,这意味着它由 Javascript **FIRST* 解析/求值。这意味着按字面意义存储在 var 中的字符将只是 {"nam":"json"n"} - JS 解析器将删除反斜杠。现在它已损坏/无效 json。

通过将反斜杠加倍,您可以确保其中一个反斜杠将继续存在并使其成为有效的 JSON,然后可以对其进行解析。

关于javascript - 将引号转义为 JSON 来解析只读字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35180952/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com