在duktape中使用json对象

Using json objects in duktape

本文关键字:json 对象 duktape      更新时间:2023-10-16

所有人。我刚刚在c++代码中集成了duktape,这样我就可以使用javascript了。

但我现在无法解决的问题是:如何在javascript中使用json对象

假设我有一些类似的javascript

function hi(person) {
    print ('hi, ' + person.name );
}

和json对象:

{
    'name' : 'duktape'
}

因此,现在我需要在cpp代码中使用这个json的参数来调用函数hi。

duk_eval_string(ctx, "function hi(person) {print ('hi, ' + person.name );}");
    duk_push_global_object(ctx);
    duk_get_prop_string(ctx, -1, "hi" ); // pushes function from loaded script to stack
    auto json = "{'name' : 'duktape' }";
    duk_push_string(ctx, json);
    duk_pcall(ctx, 1);

我得到的输出告诉,对象不是正确的

hi, undefined

我想就谁应该做这件事提出任何建议!感谢您抽出时间:)

您需要使用duk_json_decode:

char *json = "{"name": "duktape"}";
duk_push_string(ctx, json);
duk_json_decode(ctx, -1);
duk_pcall(ctx, 1);
duk_pop_2(ctx);

输出:

hi, duktape

请注意,您的原始json无效,您需要使用"作为字符串分隔符,而不是'

根据您真正需要的内容,您也可以手动创建对象:

duk_idx_t obj_idx = duk_push_object(ctx);
duk_push_string(ctx, "duktape");
duk_put_prop_string(ctx, obj_idx, "name");
duk_pcall(ctx, 1);
duk_pop(ctx);