我有一个带有这种详细信息的JSON文件(不是完整文件):
{"property": [
{
{
"name": "test1",
"value": "{\"test_type\":\"jsystem\",\"order\":1,\"test_id\":\"test_01\",\"physical_setup_id\":\"prd_01\",\"timeout\":\"20\"}",
"own": true
},
{
"name": "test2",
"value": "{\"test_type\":\"jsystem\",\"order\":2,\"test_id\":\"test_02\",\"physical_setup_id\":\"prd_02\",\"timeout\":\"30\"}",
"own": true
},
{
"name": "pass",
"value": "{\"test_type\":\"jsystem\",\"order\":3,\"test_id\":\"test_03\",\"physical_setup_id\":\"prd_01\",\"timeout\":\"15\"}",
"own": true
}
]
}
我正在尝试提取包含“name test%NUMBER%”的所有字段
我试过这个:
cat build.json | jq '.property | .[] | select(.name=="test1")'
- 它运行正常,但我想将数字参数添加到.name == test。
像这样:
cat build.json | jq '.property | .[] | select(.name=="test'[0-9]'")'
Ans第二我需要在“value”参数下解析每个数据。 像这样:
test1:
test_type=jsystem
order=1
test_id=test_01
]
}
答案 0 :(得分:0)
使用jq 1.5,添加了正则表达式支持
因此,假设property
是测试对象的数组(您的示例已损坏且无效),您可以执行此操作以选择名称遵循该模式的对象:
.property | map(select(.name | test("test[0-9]")))
然后对于每个对象,value
似乎是json字符串。在你能从中得到任何东西之前,你必须解析它们。
.property | map(
select(.name | test("test[0-9]"))
| .value |= fromjson
| { name } + .value
)
这会给你一个数组:
[
{
"name": "test1",
"test_type": "jsystem",
"order": 1,
"test_id": "test_01",
"physical_setup_id": "prd_01",
"timeout": "20"
},
{
"name": "test2",
"test_type": "jsystem",
"order": 2,
"test_id": "test_02",
"physical_setup_id": "prd_02",
"timeout": "30"
}
]
根据自己的喜好对其进行格式化。