2016-03-29 5 views
2

alle. Ich habe gerade duktape in meinen C++ Code integriert, so dass ich Javascript benutzen kann.Verwenden von JSON-Objekten in Duktape

Aber das Problem kann ich jetzt nicht lösen: wie json Objekte in Javascript zu verwenden.

Angenommen ich einige Javascript haben wie

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

und JSON-Objekt:

{ 
    'name' : 'duktape' 
} 

So, jetzt muss ich Funktion hallo mit einem Argument dieser json in meinem cpp Code aufzurufen.

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

Der Ausgang ich erzählt bekommen, ist, dass das Objekt nicht korrekt auf irgendwelche Vorschläge gehen

hi, undefined 

wie Würde, die getan werden sollte, es zum Laufen zu bringen! Dankten für Ihre Zeit :)

Antwort

1

Sie müssen verwenden 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); 

Ausgang:

hi, duktape 

Beachten Sie, dass Ihre ursprüngliche json nicht gültig ist, müssen Sie " als String-Trennzeichen verwenden anstelle von '.

Je nachdem, was man wirklich braucht, können Sie auch das Objekt manuell erstellen:

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

aw, ja, das ist mein Problem löst. Danke :) –