gpt4 book ai didi

javascript - JSON.parse() 保持字符串编码

转载 作者:搜寻专家 更新时间:2023-10-31 22:51:21 25 4
gpt4 key购买 nike

//string with correct json format

{"reaction":"\ud83d\udc4d","user":{"id":"xyz"}}

//after JSON.parse()

{ reaction: '👍', user: [Object] }

我想做的是对 react 值进行编码,但 JSON.parse() 并不完全符合我的要求。

更新

最后我决定单独留下 JSON.parse() 并按照@Brad 的建议修复数据库问题。我更改了数据库格式,但这还不足以解决问题,所以我找到了 this .现在每个语句都必须以 SET NAMES utf8mb4; 开头,然后是查询。同样在连接中,您必须拥有这些 {charset : 'utf8mb4', multipleStatements: true}。没有 node-mysql 的正确文档,很难找到最佳答案,但最终我在这个过程中学到了很多东西,谢谢。

最佳答案

如果您不想解析该字符串,那么您可以转义反斜杠,例如“\\ud83d\\udc4d”

您是否控制数据的来源?也许您想在 JSON.stringify 中提供一个“替代品”逃避那些,或JSON.parse中的“复活者” .

您有哪些选项可以控制字符串化或解析?

应用一个reviver

const myReviver = (key, val) => key === "reaction" ? val.replace(/\\/g, "\\\\") : val;

var safeObj = JSON.parse(myJson, myReviver);

警告:这似乎在浏览器中不起作用,因为看起来\uxxxx 字符在字符串中解码 before reviver 能够对其进行操作,因此没有反斜杠可以转义!

多次转义

在与 OP 聊天后发现,向具有 utf 字符的属性添加多个转义反斜杠最终导致所需的值存储在数据库中。在最终暴露出真正的 utf 字符之前,需要执行许多步骤才能对反斜杠进行转义。

这很脆弱而且远非可取,但它确实有助于确定什么是/不应该受到责备的。

没有反斜杠

这似乎是最好的解决方案。在将数据转换为 utf 字符或以任何方式处理之前,从数据中去除所有 反斜杠。本质上是在数据库中存储停用“uxxxxuxxxx”代码。

通过使用正则表达式重新插入反斜杠,可以在渲染时将这些代码恢复为 utf 字符:

database_field.replace(/(u[0-9a-fA-F]{4})/g, "\\$1");

具有讽刺意味的是,这似乎跳过了 utf 解释,而您实际上最终得到了最初想要的字符串。因此,要强制它传递之前看到的字符,可以使用以下方法进行处理:

emoji = JSON.parse(`{"utf": "${myUtfString}"}`).utf;

关于javascript - JSON.parse() 保持字符串编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48957456/

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