unix 命令格式化展平嵌套的 json 对象数据

mr.*_*tee 3 command-line json text-formatting

示例输入数据格式 json

data: {
   div1: {
      name: "some name",
      age: number,
      address_1: "some address",
      items: {
         item_x1: "some data",
         ..
         ..
      }
   }
   ..
   ..
}
Run Code Online (Sandbox Code Playgroud)

预期结果应格式化为扁平化 json

{ "data.div1.name":"some name",..., "data.div1.items.item_x1":"some data",...},
..
..
{ "data.divN.name":"some name",... }
Run Code Online (Sandbox Code Playgroud)

字段可以是未知的!所以没有必要激活任何过滤命令!

对基于 Unix 的命令有什么想法吗?

dir*_*rkt 6

看看gron。从链接页面:

使 JSON grepable!

gron将 JSON 转换为离散分配,以便更轻松地搜索所需内容并查看其绝对“路径”。它简化了对返回大量 JSON 但具有糟糕文档的 API 的探索。

? gron "https://api.github.com/repos/tomnomnom/gron/commits?per_page=1" | fgrep "commit.author"
json[0].commit.author = {};
json[0].commit.author.date = "2016-07-02T10:51:21Z";
json[0].commit.author.email = "mail@tomnomnom.com";
json[0].commit.author.name = "Tom Hudson";
Run Code Online (Sandbox Code Playgroud)

gron 也可以反向工作,使您能够将过滤后的数据重新转换为 JSON:

? gron "https://api.github.com/repos/tomnomnom/gron/commits?per_page=1" | fgrep "commit.author" | gron --ungron
[
  {
    "commit": {
      "author": {
        "date": "2016-07-02T10:51:21Z",
        "email": "mail@tomnomnom.com",
        "name": "Tom Hudson"
      }
    }
  }
]
Run Code Online (Sandbox Code Playgroud)