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