все. Я только что интегрировал duktape в мой код C ++, чтобы я мог использовать JavaScript.
Но проблема, которую я не могу решить сейчас: как использовать JSON объекты в JavaScript.
Предположим, у меня есть некоторые JavaScript, как
function hi(person) {
print ('hi, ' + person.name );
}
И JSON возражают:
{
'name' : 'duktape'
}
Поэтому теперь мне нужно вызвать функцию hi с аргументом этого json в моем коде cpp.
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);
Других решений пока нет …