如何在 json 中使用 json 查询以同名键开始查询?
How to query in json start with same name key using json query?
我有以下 json 我想取出一个 jason 数组中的所有 macaddress 列表,我该怎么做?
{
"facts_hash": {
"lib": "/usr/share/fdi/facts:/opt/extension/facts",
"interfaces": "eno1,eno2,eno3,eno4,eno5,eno6,ens3f0,ens3f1,lo",
"ipaddress_eno1": "192.168.101.135",
"macaddress_eno1": "08:f1:ea:6d:03:3c",
"netmask_eno1": "255.255.255.0",
"mtu_eno1": "1500",
"macaddress_eno2": "08:f1:ea:6d:03:3d",
"mtu_eno2": "1500",
"macaddress_eno3": "08:f1:ea:6d:03:3e",
"mtu_eno3": "1500",
"macaddress_eno4": "08:f1:ea:6d:03:3f",
"mtu_eno4": "1500",
"macaddress_eno5": "b8:83:03:81:4b:20",
"mtu_eno5": "1500",
"macaddress_eno6": "b8:83:03:81:4b:21",
"mtu_eno6": "1500",
"macaddress_ens3f0": "b8:83:03:84:d5:1c",
"mtu_ens3f0": "1500",
"macaddress_ens3f1": "b8:83:03:84:d5:1d",
},
"name": "daisy-joni-selitto-quinto",
"id": 269
}
如果可以用jq,这个表达式
[.facts_hash[]| to_entries[] | select(.key|startswith("mac")).value]
应该输出这个数组:
[
"08:f1:ea:6d:03:3c",
"b8:83:03:81:4b:21",
"b8:83:03:84:d5:1c",
"b8:83:03:84:d5:1d"
]
另一种选择是将 json 转换为 xml 并在其上使用 xpath。
您可以使用 Object.keys
迭代对象中的键,startsWith
检查 macadress 文本并使用 reduce
将您的要求输出为
var result = Object.keys(obj.facts_hash).reduce((acc, item)=>{
if(item.startsWith("macaddress")) console.log(obj.facts_hash[item]);
}, []);
或
var result = Object.keys(obj.facts_hash).reduce((acc, item) => {
if (item.startsWith("macaddress")) {
//console.log(obj.facts_hash[item]);
acc.push(obj.facts_hash[item]);
}
return acc;
}, []);
console.log(result);
var obj = {
"facts_hash": {
"lib": "/usr/share/fdi/facts:/opt/extension/facts",
"interfaces": "eno1,eno2,eno3,eno4,eno5,eno6,ens3f0,ens3f1,lo",
"ipaddress_eno1": "192.168.101.135",
"macaddress_eno1": "08:f1:ea:6d:03:3c",
"netmask_eno1": "255.255.255.0",
"mtu_eno1": "1500",
"macaddress_eno2": "08:f1:ea:6d:03:3d",
"mtu_eno2": "1500",
"macaddress_eno3": "08:f1:ea:6d:03:3e",
"mtu_eno3": "1500",
"macaddress_eno4": "08:f1:ea:6d:03:3f",
"mtu_eno4": "1500",
"macaddress_eno5": "b8:83:03:81:4b:20",
"mtu_eno5": "1500",
"macaddress_eno6": "b8:83:03:81:4b:21",
"mtu_eno6": "1500",
"macaddress_ens3f0": "b8:83:03:84:d5:1c",
"mtu_ens3f0": "1500",
"macaddress_ens3f1": "b8:83:03:84:d5:1d",
},
"name": "daisy-joni-selitto-quinto",
"id": 269
}
var result = Object.keys(obj.facts_hash).reduce((acc, item)=>{
if(item.startsWith("macaddress")) console.log(obj.facts_hash[item]);
}, []);
//console.log(result);
jq 按照 jack 的建议进行操作..这里是清晰的 jq 表达式..
jq'[.facts_hash | to_entries[] | select(.key|startswith("macaddress_")).value]'
再次感谢杰克的帮助..
我有以下 json 我想取出一个 jason 数组中的所有 macaddress 列表,我该怎么做?
{
"facts_hash": {
"lib": "/usr/share/fdi/facts:/opt/extension/facts",
"interfaces": "eno1,eno2,eno3,eno4,eno5,eno6,ens3f0,ens3f1,lo",
"ipaddress_eno1": "192.168.101.135",
"macaddress_eno1": "08:f1:ea:6d:03:3c",
"netmask_eno1": "255.255.255.0",
"mtu_eno1": "1500",
"macaddress_eno2": "08:f1:ea:6d:03:3d",
"mtu_eno2": "1500",
"macaddress_eno3": "08:f1:ea:6d:03:3e",
"mtu_eno3": "1500",
"macaddress_eno4": "08:f1:ea:6d:03:3f",
"mtu_eno4": "1500",
"macaddress_eno5": "b8:83:03:81:4b:20",
"mtu_eno5": "1500",
"macaddress_eno6": "b8:83:03:81:4b:21",
"mtu_eno6": "1500",
"macaddress_ens3f0": "b8:83:03:84:d5:1c",
"mtu_ens3f0": "1500",
"macaddress_ens3f1": "b8:83:03:84:d5:1d",
},
"name": "daisy-joni-selitto-quinto",
"id": 269
}
如果可以用jq,这个表达式
[.facts_hash[]| to_entries[] | select(.key|startswith("mac")).value]
应该输出这个数组:
[
"08:f1:ea:6d:03:3c",
"b8:83:03:81:4b:21",
"b8:83:03:84:d5:1c",
"b8:83:03:84:d5:1d"
]
另一种选择是将 json 转换为 xml 并在其上使用 xpath。
您可以使用 Object.keys
迭代对象中的键,startsWith
检查 macadress 文本并使用 reduce
将您的要求输出为
var result = Object.keys(obj.facts_hash).reduce((acc, item)=>{
if(item.startsWith("macaddress")) console.log(obj.facts_hash[item]);
}, []);
或
var result = Object.keys(obj.facts_hash).reduce((acc, item) => {
if (item.startsWith("macaddress")) {
//console.log(obj.facts_hash[item]);
acc.push(obj.facts_hash[item]);
}
return acc;
}, []);
console.log(result);
var obj = {
"facts_hash": {
"lib": "/usr/share/fdi/facts:/opt/extension/facts",
"interfaces": "eno1,eno2,eno3,eno4,eno5,eno6,ens3f0,ens3f1,lo",
"ipaddress_eno1": "192.168.101.135",
"macaddress_eno1": "08:f1:ea:6d:03:3c",
"netmask_eno1": "255.255.255.0",
"mtu_eno1": "1500",
"macaddress_eno2": "08:f1:ea:6d:03:3d",
"mtu_eno2": "1500",
"macaddress_eno3": "08:f1:ea:6d:03:3e",
"mtu_eno3": "1500",
"macaddress_eno4": "08:f1:ea:6d:03:3f",
"mtu_eno4": "1500",
"macaddress_eno5": "b8:83:03:81:4b:20",
"mtu_eno5": "1500",
"macaddress_eno6": "b8:83:03:81:4b:21",
"mtu_eno6": "1500",
"macaddress_ens3f0": "b8:83:03:84:d5:1c",
"mtu_ens3f0": "1500",
"macaddress_ens3f1": "b8:83:03:84:d5:1d",
},
"name": "daisy-joni-selitto-quinto",
"id": 269
}
var result = Object.keys(obj.facts_hash).reduce((acc, item)=>{
if(item.startsWith("macaddress")) console.log(obj.facts_hash[item]);
}, []);
//console.log(result);
jq 按照 jack 的建议进行操作..这里是清晰的 jq 表达式..
jq'[.facts_hash | to_entries[] | select(.key|startswith("macaddress_")).value]'
再次感谢杰克的帮助..