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

Reply via email to