File: asJSON.raw.R

package info (click to toggle)
r-cran-jsonlite 1.9.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,340 kB
  • sloc: ansic: 3,792; sh: 9; makefile: 6
file content (28 lines) | stat: -rw-r--r-- 900 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
setMethod("asJSON", "blob", function(x, raw = "base64", ...){
  if(identical(raw, "base64")){
    str <- vapply(x, base64_enc, character(1))
    return(asJSON(str, ...))
  }
  asJSON(as.list(x), raw = raw, ...)
})

setMethod("asJSON", "raw", function(x, raw = c("base64", "hex", "mongo", "int", "js"), ...) {

  # validate
  raw <- match.arg(raw)

  # encode based on schema
  if (raw == "mongo") {
    type <- ifelse(length(attr(x, "type")), attr(x, "type"), 5)
    return(asJSON(list(`$binary` = as.scalar(base64_enc(x)), `$type` = as.scalar(as.character(type)))))
  } else if (raw == "hex") {
    return(asJSON(as.character.hexmode(x), ...))
  } else if (raw == "int") {
    return(asJSON(as.integer(x), ...))
  } else if (raw == "js") {
    paste0('(new Uint8Array(', asJSON(as.integer(x), collapse = TRUE), '))')
  } else {
    # no as scalar here!
    return(asJSON(base64_enc(x), ...))
  }
})