Skip to contents

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


json_unnest(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> List-columns to unnest.

When selecting multiple columns, values from the same row will be recycled to their common size.


Arguments passed to methods.


If NULL, the default, the outer names will come from the inner names. If a string, the outer names will be formed by pasting together the outer and the inner column names, separated by names_sep.


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 }, { "c": 3 }]') %>%
#> # A tibble: 2 × 2
#>       a     c
#>   <dbl> <int>
#> 1     1     2
#> 2     1     3