While tinkering with 'convert/json' this evening I encountered a problem in
retrieving single-character keys from a decoded JSON object.
Here's a simple example:
b1 =: dec_json'{ "a": 1, "b": 2}'
b2 =: dec_json'{"cd": 3,"ef": 4}'
'a' gethash_json b1
_1
'b' gethash_json b1
_1
'cd' gethash_json b2
+-+
|3|
+-+
'ef' gethash_json b2
+-+
|4|
+-+
i.e., retrieval from 'b2' works as expected while single character key
lookup in 'b1' fails. The problem seems to be that single character keys
aren't being raveled prior to boxing:
({.boxopen'a') e. {.b1
0
({.boxopen,'a') e. {.b1
1
Am I overlooking something obvious (or misusing gethash_json)? If not,
here's a simple fix,
gethash_json=: 4 : 0
assert. 2=$$y
assert. 32=3!:0 y
x=. boxopen ,x NB. fix
assert. 1=$x
if. ({.x) e. {.y do.
({:y){~({.y) i. {.x
else.
_1
end.
)
Best,
M
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm