【问题标题】:How do I go about splitting JSON object key into multiple keys with their values accordingly (in R, preferably)?如何将 JSON 对象键拆分为多个键,并相应地使用它们的值(最好在 R 中)?
【发布时间】:2023-04-10 16:01:01
【问题描述】:

假设我有一个来自大型 json 文件的 sn-p:

 
"name" : "thomas",
"data1": "{\"data\": {\"friends\":[{\"age\": 29, \"married\": yes]}

持续不断

我将如何拆分它:


"name" : "thomas",
"friends": "", 
"age" : 29,
"married" : "yes"


我知道如何拆分嵌套列表,但这些不是嵌套列表,我在网上找不到任何关于这样的嵌套对象(键)的信息。谢谢!

【问题讨论】:

  • 目前还不清楚“类似这样的东西”的确切含义。数据是如何存储的?如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。分享您输入的dput() 是否清楚您的数据是如何格式化的。期望的结果是什么?您是否只想制作一个字符串?
  • 即使我们推断"data":之后的文本是一个本身包含json的字符串,它仍然不是合法的语法,所以我建议你应该找到一种方法来充分匿名你的数据以发布syntactically-valid json 字符串,否则我们将不太可能为您提供帮助。
  • 这仍然无效,不幸的是:"{\"data" : 似乎第二个引号应该被转义,如"{\"data\" :
  • 我收到了这样的 JSON 数据。这让我很难过,因为它实际上对我如何解析和清理它没有意义。我稍微编辑了这个问题。
  • 如果他们给你这个形状,那么大声抱怨。这不是有效的 json,所以让它工作的唯一方法是手动编辑或正则表达式痛苦(但实际上,应该never attempt to use regex with html/xml/json)。

标签: python r json


【解决方案1】:

如果它实际上是有效的 json(并且您上面的示例只是错字),那么

## this code block is *just* to try to programmatically create usable data
json <- jsonlite::toJSON(list(name = "thomas", data = jsonlite::toJSON(list(data = list(friends="", age=29L, married="yes")), auto_unbox=TRUE)), auto_unbox=TRUE)
json
# {"name":"thomas","data":"{\"data\":{\"friends\":\"\",\"age\":29,\"married\":\"yes\"}}"} 

然后去解析它,也许

outside <- jsonlite::fromJSON(json)
inside <- jsonlite::fromJSON(outside$data)$data
outside$data <- NULL
c(outside, inside)
# $name
# [1] "thomas"
# $friends
# [1] ""
# $age
# [1] 29
# $married
# [1] "yes"

【讨论】:

  • Kowen,这对你的真实数据有效吗?
  • 我想是这样,但我不知道如何使用 list() 因为它是一个文件,而我发布的是该文件中的一个 sn-p,我需要修复它。我现在要研究并尝试实施这个答案!谢谢!
  • 不要使用我的list 代码。 之所以存在,是因为您的数据存在很多问题。我试图重现你所说的。如果 now 确实是您所拥有的,那么这不是 JSON,因为 { {...} } 也是无效的(在您的输入和输出中)。也许应该改为[ {...} ]?底线,如果它应该是 json,那么即使我们忽略不匹配的引号,它仍然是 (a) { { ... } } 错误,以及 (b) \"married\": "yes", 错误(逗号后没有任何内容)。
  • 如果我确实更正了文件,并且它是正确的 json 格式(发送给我时很古怪),我将如何拆分它?我什至尝试将 json 转换为 csv 并以这种方式进行处理。我愿意接受任何和所有建议。
  • 我认为我的代码提出了前进的方向。如果您需要更多指导,请在更正后发布“完整/有效”json(到您的 OP 中)。
猜你喜欢
  • 2019-05-01
  • 1970-01-01
  • 2020-08-01
  • 2015-08-30
  • 1970-01-01
  • 2015-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多