在 C++ 中转义文本以将数据作为 JSON 对象传递

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

我正在用 C++ 编写一个节点模块,它使用 JSON 对象来回传递数据。

例如,我正在将这个 CSV 行读入 C++:

// input.csv
description;This is a "text" containing all sorts of symbols: Ü€ễ張

所需的输出应该是一个有效的 JSON 对象,如下所示:

{
 "description": "This is a \"text\" containing all sorts of symbols: Ü€ễ張"
}

C++端的示例代码是:

if(line[0] == "description") {
  std::string jsonObject = std::format("{{\"description\":\"{}\"}}", line[1]);
}

因此,虽然我已经确认数据已正确读入 C++(我可以将其写回到文件中,并且所有字符都应如此),但 JSON 存在两个问题:

  1. 撇号未被转义,因此 JSON 无效。
  2. 特殊字符显示不正确。

虽然我可以简单地替换撇号(

" 
\"
),但我假设
1.
有更多情况,我需要意识到这可能会弄乱字符串(例如反斜杠)。

那么,如何转义字符串以在 JSON 对象中安全地来回传递它们?有没有一种简单的方法可以将它们转换为“安全”格式?

提前谢谢您!

c++ json serialization
1个回答
0
投票

这是我的字符串转义函数

RapidXML
:

#include <string>
#include <string_view>
#include <rapidjson/writer.h>
...
std::string escape_json_string(std::string_view str)
{
    rapidjson::StringBuffer sb;
    rapidjson::Writer<rapidjson::StringBuffer> writer(sb);
    writer.String(str.data(), str.length());
    return sb.GetString();
}

注意:它在字符串的开头和结尾添加

"

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