【问题标题】:Make JSON output grep-able? [duplicate]使 JSON 输出可以 grep 吗? [复制]
【发布时间】:2016-04-01 16:40:35
【问题描述】:

我的 JSON 输出如下所示;

{  
   "1":{  
      "state":{  
         "on":false,
         "bri":124,
         "hue":14985,
         "sat":252,
         "effect":"none",
         "xy":[  
            0.5182,
            0.4363
         ],
         "ct":480,
         "alert":"none",
         "colormode":"xy",
         "reachable":true
      },
      "type":"Extended color light",
      "name":"Slaapkamer rechts",
      "modelid":"LCT001",
      "manufacturername":"Philips",
      "uniqueid":"00:17:88:01:00:dc:36:68-0b",
      "swversion":"66013187"
   },
   "2":{  
      "state":{  
         "on":false,
         "bri":125,
         "hue":14984,
         "sat":252,
         "effect":"none",
         "xy":[  
            0.5182,
            0.4363
         ],
         "ct":480,
         "alert":"none",
         "colormode":"xy",
         "reachable":true
      },
      "type":"Extended color light",
      "name":"Slaapkamer links",
      "modelid":"LCT001",
      "manufacturername":"Philips",
      "uniqueid":"00:17:88:01:00:dc:33:99-0b",
      "swversion":"66013187"
   }
}

有没有人知道一个简单的方法来使这个输出 grep 可用?或者任何其他方式将输出放在一行上,以便我可以在 json 输出上使用 grep、awk 等工具? 如果我现在对“hue”这个词做一个 grep,那么我会得到 2 行;

"hue":14985,
"hue":14984,

虽然我有时只想在第一个或第二个上 grep..

有什么想法吗?

【问题讨论】:

  • 看来需要解析,不建议用awk或者sed来解析。而是使用 jshon 之类的东西。
  • 请包含示例输入和预期输出。我不明白你的意思 “我有时只想在第一个或第二个上 grep”
  • 或者您只是想删除所有换行符?

标签: json linux bash awk grep


【解决方案1】:

jq:

jq '.["1"].state.hue' file

输出:

14985

不能使用'.1.state.hue',因为数字是一种特殊情况。


jq '.["2"].state.hue' file

输出:

14984
jq '.[].state.hue' file

输出:

14984 14985

【讨论】:

  • jq 可以找到hehe
  • JQ 正是我所需要的......谢谢
【解决方案2】:

使用 awk 方法

awk '/hue/{++count;if(count==1){print}}'

将计数更改为您想要获得的任何事件

【讨论】:

    猜你喜欢
    • 2012-08-20
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多