在JSON

时间:2015-06-08 09:45:30

标签: qt qt5 qwebelement

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

例如,在php中使用函数json_encode

echo json_encode('HELLO "me"');

输出为

  

“你好”我“”“

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

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

2 个答案:

答案 0 :(得分:2)

真的不那么难。首先使用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]。删除('}');

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

答案 1 :(得分:1)

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

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)