JavaScript — Использование объектов JSON в Duktape

все. Я только что интегрировал 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

Хотелось бы возглавить любые предложения о том, кто должен сделать, чтобы это заработало! Спасибо за ваше время 🙂

3

Решение

Вам нужно использовать 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);
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]