如何创建插入的对象使用 duktape?

How create inserted object use duktape?

有这个代码:

auto obj_idx = duk_push_object( ctx );

duk_push_string( ctx, "key" );
duk_push_string( ctx, "value" );
duk_put_prop( ctx, obj_idx );
duk_push_string( ctx, "key2" );
duk_push_string( ctx, "value" );
duk_put_prop( ctx, obj_idx );

duk_put_global_string( ctx, "obj" );

如何在obj中插入新对象?无论我多么努力地尝试插入嵌套对象,它都不起作用。要么崩溃,要么没有插入。

{
"key": "value",
"key2": "value",
"newObj": {
    "newKey": "value"
}
}

我将以下代码放入 Duktape hello 示例中,它产生了正确的结果:

auto obj_idx = duk_push_object( ctx );

duk_push_string( ctx, "key" );
duk_push_string( ctx, "value" );
duk_put_prop( ctx, obj_idx );
duk_push_string( ctx, "key2" );
duk_push_string( ctx, "value" );
duk_put_prop( ctx, obj_idx );

auto nested_idx = duk_push_object(ctx);
duk_push_int(ctx, 2019);
duk_put_prop_string(ctx, nested_idx, "year");

duk_put_prop_string(ctx, obj_idx, "nested");

duk_put_global_string( ctx, "obj" );

duk_eval_string(ctx, "print(JSON.stringify(obj))");

要记住的关键是 duk_put_propduk_put_prop_string 从堆栈中取出一个值,而 duk_push_* 将一个值压入堆栈。