我正在尝试将 QString 编码为 JSON 字符串,以便可以通过QWebFrame::evaluateJavaScript(QString("o.text = %1;").arg(???)).
例如,在 php 中使用函数 json_encode
echo json_encode('HELLO "me"');
输出将是
"你好\"我\""
这是字符串的内部表示,在 Json 对象中。
同样,使用 Qt,如何在 Json 格式的字符串中检索字符串的内部表示,因为它将被编码为值?
我正在尝试将 QString 编码为 JSON 字符串,以便可以通过QWebFrame::evaluateJavaScript(QString("o.text = %1;").arg(???)).
例如,在 php 中使用函数 json_encode
echo json_encode('HELLO "me"');
输出将是
"你好\"我\""
这是字符串的内部表示,在 Json 对象中。
同样,使用 Qt,如何在 Json 格式的字符串中检索字符串的内部表示,因为它将被编码为值?
这真的没那么难。首先使用 QJsonObjects 构建结构
QJsonObject obj;
obj.insert("tag1", QString("Some text"));
然后使用QDocument获取Json格式的字符串
QJsonDocument doc(obj);
QByteArray data = doc.toJson(QJsonDocument::Compact);
QString jsonString(data);
这将产生一个字符串,形式为: -
{ "tag1" : "一些文字" }
将项目分成一个列表,在“:”上拆分
QStringList items = jsonString.split(':', QString::SkipEmptyParts);
列表中应该有 2 项,第二项是 Json 字符串的值部分
“一些测试”}
删除最后的 '}'
QString value = items[1].remove('}');
当然,您需要进行错误检查,并注意如果原始字符串中有 ':' 或 '}',则需要先检查它们。
原始答案不能正确处理字符串:和}字符串内部。使用仅需要剥离的数组的类似方法[]:
QString encodeJsonStringLiteral(const QString &value)
{
return QString(
QJsonDocument(
QJsonArray() << value
).toJson(QJsonDocument::Compact)
).mid(1).chopped(1);
}
ab"c'd变成"ab\"c'd"
或者,如果您不需要字符串周围的双引号,请替换为.mid(2).chopped(2)