Python JSON数组列表中特定于Grep的对象值
我有下面的JSON响应数组列表。需要从中提取特定服务角色的jvirtualMachineId键的值。如何获取一个元素的数组值。例如,我如何获取jvirtualMachineId的元素值,它在服务角色中包含分析数据库。谢谢你的帮助Python JSON数组列表中特定于Grep的对象值,python,arrays,json,parsing,perl,shell,Python,Arrays,Json,Parsing,Perl,Shell,我有下面的JSON响应数组列表。需要从中提取特定服务角色的jvirtualMachineId键的值。如何获取一个元素的数组值。例如,我如何获取jvirtualMachineId的元素值,它在服务角色中包含分析数据库。谢谢你的帮助 [ { "dataCenterId": 1, "customerInstallationId": 27355, "addressBlockId": 535, "cloudHostId": 31614
[
{
"dataCenterId": 1,
"customerInstallationId": 27355,
"addressBlockId": 535,
"cloudHostId": 31614,
"hostname": "-94-t-jd-am",
"ipAddresses": [
{
"machineAddressId": 65097,
"addressRangeType": "NORMAL",
"address": "103.191.23.20"
},
{
"machineAddressId": 65098,
"addressRangeType": "NFS",
"address": "103.191.87.20"
}
],
"machineState": "RUNNING",
"machineType": "THUNDER",
"standbyVirtualMachineId": -1,
"serviceRoles": [
"ANALYTICS_DB",
"SBS_DB"
],
"hazduPen": false,
"jHost": {
"cloudHostId": 31614,
"hostName": "d.dy.com",
"ipAddress": "103.191.23.20",
"shortHostname": "12-25-94-ad"
},
"jvirtualMachineId": 32551,
"shortHostname": "-25-94-jd-ad"
},
{
"dataCenterId": 1,
"customerInstallationId": 27355,
"addressBlockId": 535,
"cloudHostId": 31613,
"hostname": "ea01fdgdf.com",
"ipAddresses": [
{
"machineAddressId": 65095,
"addressRangeType": "NORMAL",
"address": "103.191.23.19"
},
{
"machineAddressId": 65096,
"addressRangeType": "NFS",
"address": "103.191.87.19"
}
],
"machineState": "RUNNING",
"machineType": "THUNDER",
"standbyVirtualMachineId": -1,
"serviceRoles": [
"EAE_SERVICE"
],
"hazduPen": false,
"jHost": {
"cloudHostId": 31613,
"hostName": ".dynjcdfgintom",
"ipAddress": "103.191.23.19",
"shortHostname": "-25-94-ser"
},
"jvirtualMachineId": 32550,
"shortHostname": "esrsf-ea01"
},
{
"dataCenterId": 1,
"customerInstallationId": 27355,
"addressBlockId": 535,
"cloudHostId": 31612,
"hostname": "25-94-t-csom",
"ipAddresses": [
{
"machineAddressId": 65093,
"addressRangeType": "NORMAL",
"address": "103.191.23.18"
},
{
"machineAddressId": 65094,
"addressRangeType": "NFS",
"address": "103.191.87.18"
}
],
"machineState": "RUNNING",
"machineType": "THUNDER",
"standbyVirtualMachineId": -1,
"serviceRoles": [
"CACHE"
],
"hazduPen": false,
"jiveHost": {
"cloudHostId": 31612,
"hostName": "sdfsdf4-t-cs01ted.com",
"ipAddress": "103.191.23.18",
"shortHostname": "sdfsdf25-94-t-cs01"
},
"jvirtualMachineId": 32549,
"shortHostname": "12-25-94-t-cs01"
}
]
您还没有告诉我们需要使用什么编程语言,所以我假设任何语言都可以 通常,如果任何工具都可以,我会尝试用bash解决简单的问题。幸运的是,有一个工具可以使您指定的任务变得简单:!以下是您需要做的:
cat data.json | jq '.[].serviceRoles="ANALYTICS_DB"|.[].jvirtualMachineId'
您提供的JSON实际上不是格式良好的,所以我尝试在字里行间读一读:您需要一个对象数组。我可能猜错了,在这种情况下,您可能需要稍微摆弄一下jq访问器。PHP类似于:
$element = what element you want to retrieve;
//fetching the file:
$jsonArray = json_decode(file_get_contents("content/coordinaten.json"));
echo 'value: '.$jsonArray[$element];
or in your specific question:
echo 'value: '.$jsonArray["jvirtualMachineId"];
在下列情况下使用:
输出:
您的编程语言是什么???将JSON解析为地图/列表或您的语言支持的任何内容,并浏览该树。然后转到JSON.org学习JSON语法。学习只需要5-10分钟,如果你不理解它,你会完全不知所措。pythonOP说:“它在服务角色中包含分析数据库”,它返回3个整数
perl -MJSON -0ne '
my $DS = decode_json $_;
foreach my $h (@{ $DS }) {
print $h->{jvirtualMachineId}
if grep { /ANALYTICS_DB/ } @{ $h->{serviceRoles} };
}
' file.json
32551