nested key in bindings

João Paulo Varandas joaovarandas at
Wed Sep 21 14:55:00 UTC 2016

Hi Murat.

For a structure like this:
var obj = { "key1": { "key2" : { "key3": "value1-2-3" } } }

Simple answer:
The get call support flat structures.

b.get("obj.key1.key2.key3") will return null ...

But ...

Long answer:
If you are in JavaScript, you can evaluate this with the syntax:
var val = obj.key1.key2.key3;

If you are in Java, what happens is that you have a Map, inside a Map,
inside a Map ...

Map<String, Object> map1 = (Map<String, Object>) obj.get("key1");
Map<String, Object> map2 = (Map<String, Object>) map1.get("key2");
Object val = (Map<String, Object>) map2.get("key3");

Since you cannot chain the calls, you either need a helper method where you
will "chain" this in a recursive method, or you may ask the scriptEngine to
evalute this for you!

Have you tried something like ...
myScriptEngine.eval( "myobj.key1.key2.key3", bindings )

See this gist:

2016-09-21 11:20 GMT-03:00 Murat Cetin <mcetin71 at>:

> Hi,
> I read a .js file that results in Bindings that have a nested key value
> structure, e.g, key1: value1, value1 : [key2, key3, key4], key2: [value2,
> value3], and etc. Bindings.get(Object) will only return key1..I cannot
> chain multiple get calls and I don't see a method to get to say key2.. Am I
> doing something wrong? or does the get call only support flat structures?
> thanks,
> Murat

"Esta mensagem, incluindo seus anexos, pode conter informacoes 
confidenciais e privilegiadas. 
Se voce a recebeu por engano, solicitamos que a apague e avise o remetente 
Opinioes ou informacoes aqui contidas nao refletem necessariamente a 
posicao oficial da Plusoft."

"Antes de imprimir, pense em sua responsabilidade e compromisso com o MEIO 

More information about the nashorn-dev mailing list