【问题标题】:Extract array from JSON using sed and regex使用 sed 和正则表达式从 JSON 中提取数组
【发布时间】:2015-09-17 03:19:47
【问题描述】:

我正在尝试编写用于调试嵌入式设备的脚本,它们从 API 中检索 JSON 对象,该 API 包含必须运行以调试设备的脚本数组。

{
  "status":"wait",
  "settings":{
    "serialNo": "123456",
    "macAddress":"ff:ff:ff:ff:ff:ff",
    "ipMode": "static|dhcp",
    "ipAddress": "192.168.0.1",
    "ipSubnet": "255.255.255.0",
    "ipGateway": "192.168.0.10",
    "ipDns": "192.168.0.10"
  },
  "scripts":[
    "https://www.google.co.uk/1",
    "https://www.google.co.uk/2",
    "https://www.google.co.uk/3"
  ]
}

由于设备使用busybox 运行最小的linux 安装,我使用sed 来“解析”JSON 并从对象中检索值。这适用于单个参数,例如

mac=$(echo $reply | sed -ne 's/^.*"macAddress":"\([^"]*\)".*$/\1/p')
echo $mac
ff:ff:ff:ff:ff:ff

我尝试使用类似的正则表达式来匹配 [] 之间的数组内容,但是当我通过 sed 运行它时,它什么也没有返回。

scripts=$(echo $reply | sed -ne 's/"scripts":\(\[[^\[\]]*\]\)/\1/p')
echo $scripts

我希望它的结果是这样的:

echo $scripts
["https://www.google.co.uk/1","https://www.google.co.uk/2","https://www.google.co.uk/3"]

【问题讨论】:

标签: regex json bash sed


【解决方案1】:

使用jq,您可以发出以下命令:

jq -r '.scripts[]' the.json

如果要将其放入数组中,请使用命令替换:

arr=( $(jq -r '.scripts[]'  a.json ) )

现在您可以使用以下方式访问各个网址:

echo "${arr[0]}"
echo "${arr[1]}"
echo "${arr[2]}"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 2021-11-26
    • 2022-11-18
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多