转义 JSON 以避免更改插入字符串

Escaping JSON to avoid changing the insert string

我有以下 json 字符串,应将其直接插入到数据库中的单个列中:

const jsString = JSON.stringify({"escaping":"d\"on't"});

const insertion = [{"a":2,"json":jsString}];

const query = pgp.helpers.insert(insertion,["a","json"],"tbl");

然而最终在数据库中的实际结果是:

{"escaping":"d"on't"}

删除 d"on't 中的转义 \ 并使字符串无效 json。有什么方法可以避免这种情况吗?

这会很有帮助,因为如果我的有效 json 保持不变就好了。

js 中的这个字符串 const jsString = JSON.stringify({"escaping":"d\\"on't"}); 将导致这个 {"escaping":"d\\"on't"}

虽然 js 中的这个字符串 const jsString = JSON.stringify({"escaping":"don't"}); 会导致这个 {"escaping":"don't"}

  1. 不要把你的数据串成JSON,直接用
  2. 将列格式设置为 JSON,使用 :json 修饰符

const data = {escaping: "d\"on't"};
const insertion = [{a:2, json:data}];
const query = pgp.helpers.insert(insertion, ["a", "json:json"], "tbl");

但是如果你的data一直是对象,那么你甚至不需要使用:json修饰符,它会自动格式化为正确的JSON。

有关更多详细信息,请参阅 ColumnSet 类型的灵活性。您可以用任何可以想到的方式操作您的输入数据。