如何在Linux中获取长json文件中的javascript关键路径

如何在Linux中获取长json文件中的javascript关键路径

我正在使用一个长 JavaScript 对象中的多个键,表示为 json。例子:

...
"stock": {
  "type": 'str',
  "properties": {
    "warehouse": {
      "type": 123
    },
    "retail": {
      "type": false
    }
  }
}
...

例如,我想知道 key 的完整路径type。比如无需手动get-paht type获取即可。root.somethingElse.stock.properties.retail.type这是一个很长的文件,上下搜索似乎效率不高......

Cli 或 Gui 工具都可以。但是我找不到任何返回该结果的应用程序、扩展程序或命令行工具。

我尝试了 Chrome 的“JsonView”,但无法让它加载本地文件。

杰克似乎也没有解决这个问题,因为缺少一些双引号。

编辑:我意识到这是一个 js 对象,尽管表示为 json。

答案1

从一个开始正确形成并完成 MWE :

{
  "stock": {
    "type": "str",
    "properties": {
      "warehouse": {
        "type": 123
      },
      "retail": {
        "type": false
      }
    }
  }
}

然后使用jq(v1.5):

$ jq -M -c 'path(..|.type? // empty) | join(".")' mwe.json
"stock.type"
"stock.properties.warehouse.type"

(添加-r以省略输出中的引用,-M并且-c仅用于格式化输出)。这会向下递归结构 ( ..) 寻找“类型”的索引或键,?当不合适时抑制错误 ( ),//当值为 false 或 null 时评估为“空”( ),然后展平 ( join()) 路径数组。

一个可能的问题是false值(或 null)触发empty(至少在 v1.5 中,但在 v1.4 中不是)并且该stock.properties.retail.type项目被省略。

如果没有,| join(".")您将获得 JSON 数组,这也可能很有用:

["stock","type"]
["stock","properties","warehouse","type"]

更复杂的版本,包括值:

$ jq -M -c '[paths(.|select(type=="object" and has("type")) )][] \
            as $path | [$path+["type"], getpath($path + ["type"])]' mwe.json  
[["stock","type"],"str"]
[["stock","properties","warehouse","type"],123]
[["stock","properties","retail","type"],false]

这是更优雅一点,它通过选择具有“type”子代的所有对象来创建一个数组,然后打印“type”的路径及其值。

相关内容