Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将QJsonObject转换为Javascript对象 > qjsValue,代码> qjSunObjs不隐式转换为 QjsValue,我想调用C++中的“代码> QJSEngine < /代码>的JavaScript函数,参数应该通过QList传递给另一个代码< QJSValue的调用函数,该函数本身包含函数。_Javascript_C++_Qt_Qjsengine - Fatal编程技术网

将QJsonObject转换为Javascript对象 > qjsValue,代码> qjSunObjs不隐式转换为 QjsValue,我想调用C++中的“代码> QJSEngine < /代码>的JavaScript函数,参数应该通过QList传递给另一个代码< QJSValue的调用函数,该函数本身包含函数。

将QJsonObject转换为Javascript对象 > qjsValue,代码> qjSunObjs不隐式转换为 QjsValue,我想调用C++中的“代码> QJSEngine < /代码>的JavaScript函数,参数应该通过QList传递给另一个代码< QJSValue的调用函数,该函数本身包含函数。,javascript,c++,qt,qjsengine,Javascript,C++,Qt,Qjsengine,问题是我的一个参数是QJsonObject,到目前为止,我应该将其转换为文本,然后调用并将其传递给调用JSON.parse的javascript函数,以将其转换为对象,我正在寻找一种解决方案,让我在C++中把 QjSunObjult/Cuff>转换成 QJSValue,并用对象参数调用JavaScript函数而不是JSON文本。 目前代码如下所示 QJsonObject obj; obj["1"] = QString("A"); obj["2"] = QString("B"); QJSValu

问题是我的一个参数是
QJsonObject
,到目前为止,我应该将其转换为文本,然后调用并将其传递给调用
JSON.parse的javascript函数,以将其转换为对象,我正在寻找一种解决方案,让我在C++中把<代码> QjSunObjult/Cuff>转换成<代码> QJSValue,并用对象参数调用JavaScript函数而不是JSON文本。
目前代码如下所示

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);

可能的话,使用
toScriptValue()
将单个
QJsonObject
值转换为
QJSValue
,然后将它们连接到
QJSValueList
。。并调用
func
将它们追加到一个
QJSValue

QJSEngine myEngine;
QJsonObject obj;
obj["1"] = QString("A");
obj["2"] = QString("B");
obj["3"] = QString("C");

QJSValue func = myEngine.evaluate("(function() {var args = Array.prototype.slice.call(arguments); var res='';for(i=0; i<args.length; i++) {res += args[i]}; return res})");
QJSValueList args;
for (int i=0 ; i < obj.size(); i++){
    args << myEngine.toScriptValue(obj.value(obj.keys().at(i)));
}
QJSValue res = func.call(args);
QJSEngine;
QJsonObject对象;
obj[“1”]=QString(“A”);
obj[“2”]=QString(“B”);
obj[“3”]=QString(“C”);

QJSValue func=myEngine.evaluate(“(function(){var args=Array.prototype.slice.call(参数);var res=”;对于(i=0;i可能,使用
toScriptValue()将单个
QJsonObject
值转换为
QJSValue
,然后将它们连接到
QJSValueList
。并调用
func
将它们添加到一个
QJSValue

QJSEngine myEngine;
QJsonObject obj;
obj["1"] = QString("A");
obj["2"] = QString("B");
obj["3"] = QString("C");

QJSValue func = myEngine.evaluate("(function() {var args = Array.prototype.slice.call(arguments); var res='';for(i=0; i<args.length; i++) {res += args[i]}; return res})");
QJSValueList args;
for (int i=0 ; i < obj.size(); i++){
    args << myEngine.toScriptValue(obj.value(obj.keys().at(i)));
}
QJSValue res = func.call(args);
QJSEngine;
QJsonObject对象;
obj[“1”]=QString(“A”);
obj[“2”]=QString(“B”);
obj[“3”]=QString(“C”);

QJSValue func=myEngine.evaluate(“(function(){var args=Array.prototype.slice.call(arguments);var res=”;for(i=0;i我也遇到了类似的问题。我开始从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);

}

我也遇到了类似的问题,我开始沿着从QJsonValue递归遍历树并从中构建QJsonValue的路径前进

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);

}
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);

}
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;