首页 > 解决方案 > 如何使用 jq 获取我的 json 的所有第一个对象?

问题描述

我想获取我的 json 文件的第一个对象(不知道它是否是正确的名称),该文件很大(超过 120k 行),所以我无法手动解析它。

格式是这样的:

"datanode": [
    {
        "isWhitelisted": true,
        "metricname": "write_time",
        "seriesStartTime": 1542037566944,
        "supportsAggregation": true
    },
    {
        "isWhitelisted": true,
        "metricname": "dfs.datanode.CacheReportsNumOps",
        "seriesStartTime": 1542037501137,
        "supportsAggregation": true,
        "type": "COUNTER"
    },
    {
        "isWhitelisted": true,
        "metricname": "FSDatasetState.org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl.EstimatedCapacityLostTotal",
        "seriesStartTime": 1542037495521,
        "supportsAggregation": true,
        "type": "GAUGE"
    },
],
    "toto": [
....

我需要的是提取这个:datanode,toto等。只有名字。

你能帮我吗 ?

我尝试使用 jq 没有成功。

标签: pythonjsonjq

解决方案


你可以使用jq的keys功能

jq 'keys' file.json

将来尝试改进使用哪些词来描述 json 数据的不同部分。您在文本中询问了对象,但实际上是指键。

这个问题的更合适的标题应该是:“如何使用 jq 获取 json 数据的所有顶级键?” 有了这个更正确的措辞,您会发现已经回答了类似这样的问题:How to get key names from JSON using jq

还要提供完整有效的示例结构和预期结果,如下所示:

{
  "one_key": {
    "foo": "bar"
  },
  "another_one": {
    "bla": "bla"
  }
}

和期望的结果:

[
  "another_one",
  "one_key"
]

推荐阅读