Just wanted to say thanks for asking this question Guilherme. I know have access to a straight forward json parser for my native module.
when walking the jsonObject that results from the parsing do you loop over properties to find the keys of interest or is there a rapid/hashlike lookup available?
ie
Handle<Value> parseJson(Handle<Value> jsonString) {
HandleScope scope;
Handle<Context> context = Context::GetCurrent();
Handle<Object> global = context->Global();
Handle<Object> JSON = global->Get(String::New("JSON"))->ToObject();
Handle<Function> JSON_parse = Handle<Function>::Cast(JSON->Get(String::New("parse")));
// return JSON.parse.apply(JSON, jsonString);
return scope.Close(JSON_parse->Call(JSON, 1, &jsonString));
}
then on the returned Handle<Value> obj
Local<Array> propertyNames = obj->GetPropertyNames();
for (int i=0;i < propertyNames->Length();++i) {
// check if propertyName matches one I'm interested in
}
or recursively walk the json tree
Handle<Value> findMatchingValue(const string &key, Handle<Value> obj) {
HandleScope scope;
Handle<Value> rval;
Local<Array> propertyNames = obj->GetPropertyNames();
for (int i=0;i < propertyNames->Length();++i) {
String::Utf8Value name = properNames->Get(i);
if (name == *obj) { // check if propertyName matches one I'm interested in, not sure this will compile/function as desired
rval = currentValue;
}
// if value type is an object or has children, gotta figure how to do this
rval = findMatchingValue(key,value)
}
}