【问题标题】:Parse json with big integer in R在R中用大整数解析json
【发布时间】:2020-11-25 16:58:55
【问题描述】:

我有 json

"{\"old_value\":\"Active\",\"new_value\":\"Inactive\",\"campaign_id\":23845817785350401,\"type\":\"run_status\"}"

campaign_id = 23845817785350401 为整数。
当我试图解析它时,我遇到了一些问题:

"{\"old_value\":\"Active\",\"new_value\":\"Inactive\",\"campaign_id\":23845817785350401,\"type\":\"run_status\"}" %>% jsonlite::fromJSON()
$old_value
[1] "Active"

$new_value
[1] "Inactive"

$campaign_id
[1] 23845817785350400

$type
[1] "run_status"

campaign_id 解析不正确。
如何像字符一样解析它或在 json 中为campaign_id 添加引号?
谢谢!

【问题讨论】:

  • 对于“大”整数,R 将它们转换为 Double 值(因为 R 本身没有 64 位整数)。您可以使用任意数量的包,例如 mpfr 来处理 64 位整数。
  • @Oliver:为什么不把它当作一个字符串呢?
  • @Oliver,是的,我可以,但是在fromJSON 之后返回的数字已经错误
  • 如果您对使用 R 大数解析感到沮丧,请使用 stringr::str_extract(json, '(?<="campaign_id":)\\d+')
  • @WiktorStribiżew 谢谢!我想过这个,但希望有更优雅的解决方案

标签: r regex jsonlite


【解决方案1】:

由于解析长数字会导致数据丢失,您可能可以在这里依赖正则表达式提取。

你可以使用

x <- "{\"old_value\":\"Active\",\"new_value\":\"Inactive\",\"campaign_id\":23845817785350401,\"type\":\"run_status\"}"
library(stringr)
stringr::str_extract(x, '(?<="campaign_id":)\\d+')
# => [1] "23845817785350401"

也就是说,它会提取出现在"campaign_id": 子字符串之后的一个或多个数字(带有\d+)。

参见R demo onlinea regex demo

【讨论】:

    猜你喜欢
    • 2016-03-02
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多