| json_class | R Documentation |
To communicate object type information via JSON to the Jackson-powered
openBIS interface, the @type field is used. Data received from openBIS is
recursively stripped of @type fields and the type information is saved as
class attribute. Such objects also have the class json_class added. The
function as_json_class() (or its alias as.json_class()) powers this
recursive conversion of a list with filed @type into a json_class
object. The constructor json_class() is available for non-recursive
instantiation of json_class objects.
json_class(..., class) as_json_class(x, ...) as.json_class(x, ...) ## S3 method for class 'json_class' as_json_class(x, ...) ## S3 method for class 'list' as_json_class(x, recursive = TRUE, ...) ## S3 method for class 'json_vec' as_json_class(x, ...) ## Default S3 method: as_json_class(x, force = FALSE, ...) rm_json_class(x, recursive = TRUE, restore_type = TRUE) ## S3 method for class 'json_class' as.list(x, keep_asis = TRUE, recursive = !keep_asis, restore_type = !keep_asis, ...) is_json_class(x) is.json_class(x) check_json_class(x, recursive = TRUE)
... |
Generic compatibility. |
class |
JSON sub-class name. |
x |
Object to process. |
recursive |
Recursively apply the function. |
force |
Suppress error when casting an object to |
restore_type |
When removing the |
keep_asis |
Used in |
The action of as_json_class() is reversed by rm_json_class(). This
removes both the json_class class attribute and the JSON class attribute
itself, which is subsequently written to a @type filed. This preserving
of type information can be disabled, by setting the argument restore_type
to FALSE. Furthermore, the action can be applied recursively with the
argument recursive. The function as.list() can also be used to perform
the above actions, but with default arguments, it does nothing, as
functions such as base::sapply() and base::lapply(), call as.list().
JSON class objects have custom sub-setting and printing functions available.
Sub-setting of JSON objects that preserve class and json_class
attributes. This is useful when objects are created from openBIS results
which are subsequently used in further queries, but the constructors they
are passed to require only a subset of the fetched fields.
The functions is_json_class() tests whether an object is a proper JSON
class object, meaning that:
it is a list
it inherits json_class
the last class attribute is json_class
apart from json_class there exists at least one more class attribute
In order to recursively test a json_class object for being properly
formed, the function check_json_class() can be used. This recurses through
a list structure and whenever an object inherits from json_class it is
tested with is_json_class().
JSON objects are represented as S3 classes with two class
attributes: json_class and an object specific class name (typically to
mirror the openBIS class).
Other json object handling functions: has_fields.json_class,
json_vec, print.json_class
lst <- list(`@type` = "foobar",
a = list(`@type` = "foo", b = "c"),
d = list(`@type` = "bar", e = "f"))
cls <- as_json_class(lst)
print(cls, depth = 2)
is_json_class(cls)
get_subclass(cls)
# recursive validation of json_class objects with check_json_class()
attr(cls[["d"]], "class") <- "json_class"
is_json_class(cls)
check_json_class(cls)
# as_json_class() is idempotent
identical(as_json_class(lst), as_json_class(as_json_class(lst)))
# rm_json_class() reverses the action of as_json_class()
identical(lst, rm_json_class(as_json_class(lst)))
# json_class objects can be instantiated using the constructor json_class()
identical(as_json_class(lst),
json_class(a = json_class(b = "c", class = "foo"),
d = json_class(e = "f", class = "bar"),
class = "foobar"))
cls <- as_json_class(lst)
# the default of as.list does nothing
identical(cls, as.list(cls))
# this can be disabled, by setting keep_asis to FALSE
identical(lst, as.list(cls, keep_asis = FALSE))
# further options are disabling recursive action
as.list(cls, keep_asis = FALSE, recursive = FALSE)
# and dropping type information
as.list(cls, keep_asis = FALSE, recursive = FALSE, restore_type = FALSE)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.