在 python -mjson.tool 命令中使用过滤条件

在 python -mjson.tool 命令中使用过滤条件

我可以在 python -mjson.tool 命令中使用过滤条件来选择具有特定属性的对象吗?

例如,我有一个 example.json 文件,其中包含两个对象,其中两个对象具有属性“test”:“pi”。我只需要获取这两个对象。

答案1

嵌套数据结构(如 JSON)必须由相关工具(例如此处的 json-aware)进行解析,才能正确提取信息。尝试仅使用行感知例程(如 grep/sed/awk/等)操作嵌套数据结构,将产生失败和误报。例如,只有当您的 JSON 打印得很漂亮且每个 JSON 元素每行一个时,上述答案才有效。尽管如果 JSON 以其他方式打印(即在一行中,或者在同一行上有多个元素),它会失败。

因此,如果您使用 python,则必须解析该对象,然后以编程方式提取所需的数据(即用 python 编写脚本)。

然而,还有另一种方法:对于unix,有一些开发的或支持json的实用程序可以很容易地实现像您这样的要求,例如jq、jtc(以及许多其他)。下面我就给大家展示一下解决方案JTC:

假设您有以下 json:

bash $ cat file.json 
{
   "Root": [
      {
         "data": "2.71",
         "test": "e"
      },
      {
         "data": "3.14",
         "test": "pi"
      }
   ]
}
bash $ 

然后,为了提取包含 的所有对象"test": "pi",使用jtc如下所示:

bash $ cat file.json | jtc -w'[test]:<pi>: [-1]'
{
   "data": "3.14",
   "test": "pi"
}
bash $ 

walk-path ( -w) 参数的解释:

1.[test]:<pi>:将找到所有类似的元素"test": "pi"(如果有多个)

2.[-1]将从找到的元素上升 1 个 JSON 层。

将打印结果步行。

请在此处查阅jtc完整的用户指南:https://github.com/ldn-softdev/jtc/blob/master/User%20Guide.md

答案2

我相信答案是否定的。我不是Python专家,但我看过代码。我没有看到该工具的任何选项。
我最近也遇到了同样的问题,我刚刚通过管道grep我正在寻找的内容。 grep 允许您查看匹配行之前和/或之后的行,以便您可以查看整个子句。
... | pythom -m json.tool | grep -E -B 3 -A 5 'test.*:.*pi'
这将显示任何包含“测试”的行之前 3 行和之后 5 行 [something] : [something] pi

相关内容