2

我正在尝试将 QString 编码为 JSON 字符串,以便可以通过QWebFrame::evaluateJavaScript(QString("o.text = %1;").arg(???)).

例如,在 php 中使用函数 json_encode

echo json_encode('HELLO "me"');

输出将是

"你好\"我\""

这是字符串的内部表示,在 Json 对象中。

同样,使用 Qt,如何在 Json 格式的字符串中检索字符串的内部表示,因为它将被编码为值?

4

2 回答 2

4

这真的没那么难。首先使用 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('}');

当然,您需要进行错误检查,并注意如果原始字符串中有 ':' 或 '}',则需要先检查它们。

于 2015-06-09T09:11:43.953 回答
2

原始答案不能正确处理字符串:}字符串内部。使用仅需要剥离的数组的类似方法[]

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)

于 2019-08-15T21:20:39.613 回答