thanks again. Much appreciate the intro to json objects in v8 On Jun 21, 2012, at 6:11 AM, Matthias Ernst <[email protected]> wrote:
> On Thu, Jun 21, 2012 at 12:03 PM, Mark Essel <[email protected]> wrote: >> Thanks for calling it out Matthias. Assume it works for nested properties: >> >>> obj_handle->Get(propertyName)->Get(propertyName) > > Almost. Get is defined in Object, but returns a Handle<Value>. > So you need to test (value_handle->IsObject()) and cast > (value_handle.As<Object>). > > Handle<Value> v = ... parse json ... > for (const string& property_name : path) { > if (!v->IsObject()) { > v = v8::Undefined(); > break; > } > v = (v.As<Object>)->Get(property_name); > } > > or somesuch. > >> >> I was hoping for a nested map of maps >> obj[pname1][pname2][pname3] >> >> >> On Jun 21, 2012, at 5:47 AM, Matthias Ernst <[email protected]> wrote: >> >>> On Thu, Jun 21, 2012 at 12:49 AM, Mark Essel <[email protected]> wrote: >>>> 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? >>> >>> You're using it already: obj_handle->Get(propertyName) >>> >>>> >>>> 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) >>>> } >>>> } >>>> >>>> >>>> >>>> >>>> On Sunday, June 10, 2012 5:30:10 PM UTC-4, Guilherme Silva wrote: >>>>> >>>>> Thanks everybody for your replies! I want to create a Script Manager that >>>>> encapsulates V8 and abstracts both js from json files ;). >>>> >>>> -- >>>> v8-users mailing list >>>> [email protected] >>>> http://groups.google.com/group/v8-users >>> >>> -- >>> v8-users mailing list >>> [email protected] >>> http://groups.google.com/group/v8-users >> >> -- >> v8-users mailing list >> [email protected] >> http://groups.google.com/group/v8-users > > -- > v8-users mailing list > [email protected] > http://groups.google.com/group/v8-users -- v8-users mailing list [email protected] http://groups.google.com/group/v8-users
