On Jun 12, 2009, at 6:34 PM, Kynn Jones wrote:

When converting from JSON to R it seems logical that a JSON array would correspond to an "unnamed" R list, while a JSON object would correspond to a
"named" R list.  E.g.
JSON: [1, 3.1415927, "foo", false, null] => R: list(1, 3.1415927, "foo",
FALSE, NA);


note that NULL and NA are entirely different concepts - I don't think mapping NULL to NA is a good idea ... why don't you just use NULL?


and

JSON { "int": 1, "float": 3.1415927, "string": "foo", "logical": false,
"null": null }  => R: list(int=1, float=3.1415927, string="foo",
logical=FALSE, null=NA)

But I see at least a couple of problems with this scheme. First, how would one distinguish between the R versions of an empty JSON array (i.e. [ ]),
and an empty JSON object (i.e. { })?


Just add an attribute in that special case for one or the other. Or even better in general you can make JSON dictionaries (or arrays as well) a specific class (each) -- that would also help with future dispatch when processing such objects. Also note that specific arrays (scalar ones) are actually better mapped to vectors ...


Second, JSON allows the empty key in an object (e.g., this is a valid JSON object: { "": 123 }), but as far as I can tell, R does not allow the empty
string as a name in a named list:


That's not true, try
l=list(123)
names(l)=""

list(""=123)
Error: attempt to use zero-length variable name


That has nothing to do with lists per se - the problem is the empty argument name in the call to the function `list`. However, you'll be creating the list programmatically so you won't run into that.

Cheers,
Simon




Any suggestions for dealing with these edge cases would be much appreciated!

TIA!

kynn

        [[alternative HTML version deleted]]

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel



______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to