Skip to contents

A wrapper around tidyr::unpack() that extracts its data from a JSON column. The inverse of json_pack().


json_unpack(data, cols, ..., names_sep = NULL, names_repair = "check_unique")



A data frame, a data frame extension (e.g. a tibble), or a lazy data frame (e.g. from dbplyr or dtplyr).


<tidy-select> Columns to unpack.


Arguments passed to methods.


If NULL, the default, the names will be left as is. In pack(), inner names will come from the former outer names; in unpack(), the new outer names will come from the inner names.

If a string, the inner and outer names will be used together. In unpack(), the names of the new outer columns will be formed by pasting together the outer and the inner column names, separated by names_sep. In pack(), the new inner names will have the outer names + names_sep automatically stripped. This makes names_sep roughly symmetric between packing and unpacking.


Used to check that output data frame has valid names. Must be one of the following options:

  • "minimal": no name repair or checks, beyond basic existence,

  • "unique": make sure names are unique and not empty,

  • "check_unique": (the default), no name repair, but check they are unique,

  • "universal": make the names unique and syntactic

  • a function: apply custom name repair.

  • tidyr_legacy: use the name repair from tidyr 0.8.

  • a formula: a purrr-style anonymous function (see rlang::as_function())

See vctrs::vec_as_names() for more details on these terms and the strategies used to enforce them.


An object of the same type as data


tibble(a = 1, b = '{ "c": 2, "d": 3 }') %>%
#> # A tibble: 1 × 3
#>       a     c     d
#>   <dbl> <int> <int>
#> 1     1     2     3