【问题标题】:Extract a value from a nested json key in bash从bash中的嵌套json键中提取值
【发布时间】:2020-10-30 01:52:29
【问题描述】:

假设我有以下 JSON:

{
  "id": "Ab12",
  "details": "{\"timeValue\":null,\"lastModifiedIn\":\"PHX\"}",
  "version": 3
}

我想在不使用 jq 命令的情况下提取“lastModifiedIn”键的值。 基本上,我寻求的结果是“PHX”。

有没有办法使用基本的 shell 脚本来提取它?

【问题讨论】:

  • 为什么detailsstring ("{\"lastModifiedIn\":\"PHX\"}") 而不是object ({ "lastModifiedIn" : "PHX"})?这使得解析它比必要的更难。你能以某种方式影响这些数据的生成器吗?
  • json 实际上是从数据库调用中检索到的,它将 json 存储为单纯的字符串。我刚刚检索到它,现在我想提取值
  • 我对脚本不太熟悉,但通过谷歌搜索我意识到我可能必须使用 grep 或 sed 来提取该值。但是,我不太确定该怎么做
  • 如果你走那条路,每次你从这个数据库中提取一些东西时,你都必须处理它。与数据库人员交谈。问他们如何正确提取json对象
  • 确实如此。但是,这更像是一个修补程序,需要从开发者端解决。

标签: bash sed terminal grep


【解决方案1】:

这很草率,但考虑到输入和您不使用jq 的要求,这可能足以满足您的目的:

$ sed -n 's/.*"lastModifiedIn\\":\\"\([^\\]*\).*/\1/p' file
PHX

【讨论】:

  • 谢谢埃德。只是好奇,如果我想通过管道提供输入,而不是“文件”,我们该怎么做?
  • 使用任何其他工具的方法相同:foo | sed 'script' 而不是 sed 'script' file
猜你喜欢
  • 2021-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
  • 1970-01-01
  • 2015-07-24
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多