gpt4 book ai didi

javascript - 将 QJsonObject 转换为 Javascript 对象

转载 作者:行者123 更新时间:2023-11-27 22:40:08 27 4
gpt4 key购买 nike

作为 QJSValue 上的 qt 文档, QJsonObject不能隐式转换为 QJSValue , 我想用 QJSEngine 调用一个 javascript 函数在 C++ 中,参数应使用 QList<QJsValue> 传递调用另一个函数 QJSValue它包含函数本身。

问题是我的论据之一是QJsonObject ,直到现在我应该将它转换为文本然后调用并将其传递给调用 JSON.parse 的 javascript 函数为了将其转换为对象,我正在寻找一种可以让我转换 QJsonObject 的解决方案进入QJSValue在 C++ 中使用对象参数而不是 json 文本调用 javascript 函数。

目前代码如下所示

QJsonObject obj;
obj["1"] = QString("A");
obj["2"] = QString("B");

QJSValue func = myEngine.evaluate("(function(arg) { var obj = JSON.parse(arg); var res = obj[\"1\"] + obj[\"2\"]; return res; })");
QJSValueList args;
args << QString(QJsonDocument(obj).toJson());
QJSValue res = func.call(args);

我想要一个类似 QJSValue ConvertToQJSValue(QJsonObject object) 的函数像这样:

QJsonObject obj;
obj["1"] = QString("A");
obj["2"] = QString("B");

QJSValue func = myEngine.evaluate("(function(arg) { var res = arg[\"1\"] + arg[\"2\"]; return res; })");
QJSValueList args;
args << ConvertToQJSValue(obj);
QJSValue res = func.call(args);

最佳答案

我遇到了类似的问题。我开始沿着从 QJsonValue 递归遍历树并从中构建 QJSValue 的路径走下去。

QJSValue Convert(QJSEngine* engine, const QJsonValue& val)
{
if (val.isBool())
{
return QJSValue(val.toBool());
}
else if (val.isString())
{
return QJSValue(val.toString());
}
else if (val.isDouble())
{
return QJSValue(val.toDouble());
}
else if (val.isNull())
{
return QJSValue(QJSValue::NullValue);
}
else if (val.isUndefined())
{
return QJSValue(QJSValue::UndefinedValue);
}
else if (val.isObject())
{
QJsonObject obj = val.toObject();
QJSValue newobj = engine->newObject();
for (auto itor = obj.begin(); itor != obj.end(); itor++)
{
QString key = itor.key();
QJsonValue value = itor.value();
QJSValue convertedValue = Convert(engine, value);
newobj.setProperty(key, convertedValue);
}
return newobj;
}
else if (val.isArray())
{
QJsonArray arr = val.toArray();
QJSValue newobj = engine->newArray(arr.size());
for (int i = 0; i < arr.size(); i++)
{
QJsonValue value = arr[i];
QJSValue convertedValue = Convert(engine, value);
newobj.setProperty(i, convertedValue);
}
return newobj;
}


// ASSERT(FALSE && "This shouldn't happen");
return QJSValue(QJSValue::UndefinedValue);

}

在上面的代码中,您可以传递 QJsonObject 或任何其他类型的 JSON 节点以转换为 QJSValue。

我目前正在使用更接近您的原始解决方案的方法 - 只需从引擎调用 JSON.parse:

QJSValue func = engine->evaluate("JSON.parse");
QJSValueList args;
args.append(jsonText); // jsonText is a QString or QJSValue string
QJSValue result = func.call(args);
return result;

关于javascript - 将 QJsonObject 转换为 Javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49658551/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com