我正试图将QString编码为JSON字符串,以便我可以通过QWebFrame::evaluateJavaScript(QString("o.text = %1;").arg(???))
安全地注入它。
echo json_encode('HELLO "me"');
输出将是
" HELLO "我 "
这是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": "Some Text"}
将项目分隔成一个列表,使用':'分隔
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)