首页 > 解决方案 > 快速提取数据框中的 json 字段

问题描述

我有一个大数据框(250k 行),其中一列是 json 文本。json 很大,包含多个元素。我想解析那个json的一两个元素。我使用过jsonlite::fromJSON(),但这似乎效率低下,因为我会解析整个文本以获得一个元素。微基准为每行提供 50 毫秒。对于这种方法。然后我找到了jqr允许我访问一个元素的包,虽然速度很快(每行 2 毫秒),但我认为它可以更快(我可能错了。我编写了一个包装器以允许jqr::jq在列中使用该函数,但它不会不会增加太多开销,但我仍然认为它很慢。我错误地认为这应该更快?

getJson = function(json, jsonTrajectory){
  stopifnot(length(jsonTrajectory)==1)
  .getJson1 = function(json, jsonTrajectory){
    if(is.na(json)|json=="") return(NA)
    return(jqr::jq(json, jsonTrajectory))
  }
  jsonParsedVector = json %>% purrr::map(.f = ~.getJson1(.x, jsonTrajectory))
  return(jsonParsedVector)
}

标签: rjsonlite

解决方案


推荐阅读