File: json_gzip.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 (46 lines) | stat: -rw-r--r-- 1,361 bytes parent folder | download | duplicates (2)
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#' Gzipped JSON
#'
#' Wrapper to generate and parse gzipped JSON, in order to save some disk or
#' network space. This is mainly effective for larger json objects with many
#' repeated keys, as is common in serialized data frames.
#'
#' The [as_gzjson_raw] and [parse_gzjson_raw] functions work with raw (binary)
#' vectors of compressed data. To use this in a place where only text is allowed
#' you can wrap the output again in [base64] as done by [as_gzjson_b64] and
#' [parse_gzjson_b64]. This increases the size again with about 33%.
#'
#'
#' @param x R data object to be converted to JSON
#' @param ... passed down to [toJSON] or [fromJSON]
#' @export
#' @name gzjson
#' @rdname gzjson
#' @examples str <- as_gzjson_b64(iris[1:5,])
#' cat(str)
#' parse_gzjson_b64(str)
as_gzjson_raw <- function(x, ...){
  json <- toJSON(x = x, ...)
  memCompress(json, 'gzip')
}

#' @export
#' @rdname gzjson
as_gzjson_b64 <- function(x, ...){
  buf <- as_gzjson_raw(x = x, ...)
  base64_enc(buf)
}

#' @export
#' @rdname gzjson
#' @param buf  raw vector with gzip compressed data
parse_gzjson_raw <- function(buf, ...){
  json <- rawToChar(memDecompress(buf, 'gzip'))
  fromJSON(json, ...)
}

#' @export
#' @rdname gzjson
#' @param b64 base64 encoded string containing gzipped json data
parse_gzjson_b64 <- function(b64, ...){
  parse_gzjson_raw(base64_dec(b64), ...)
}