在 php 中忙于 JSON 文件解析
Busy JSON file parsing in php
我正在尝试通过 php 从相当大的 JSON 文件中提取数据值。该文件来自 USGS 服务器,包含大量我不需要的信息,我只是想获取数据值,而不是所有元数据。我从来没有处理过 JSON 这么大的文件,因为我对它们的格式还很陌生。
{
"name": "ns1:timeSeriesResponseType",
"declaredType": "org.cuahsi.waterml.TimeSeriesResponseType",
"scope": "javax.xml.bind.JAXBElement$GlobalScope",
"value": {
"queryInfo": {
"queryURL": "http://waterservices.usgs.gov/nwis/iv/format=json&sites=01129500&startDT=2017-11-05T18:00-0500&endDT=2017-11-06T03:00-0500¶meterCd=00060&siteStatus=all",
"criteria": {
"locationParam": "[ALL:01129500]",
"variableParam": "[00060]",
"timeParam": {
"beginDateTime": "2017-11-05T23:00:00.000",
"endDateTime": "2017-11-06T08:00:00.000"
},
"parameter": []
},
"note": [
{
"value": "[ALL:01129500]",
"title": "filter:sites"
},
{
"value": "[mode=RANGE, modifiedSince=null] interval={INTERVAL[2017-11-05T23:00:00.000Z/2017-11-06T08:00:00.000Z]}",
"title": "filter:timeRange"
},
{
"value": "methodIds=[ALL]",
"title": "filter:methodId"
},
{
"value": "2017-11-06T21:03:28.078Z",
"title": "requestDT"
},
{
"value": "efbacfd0-c335-11e7-9d73-6cae8b663fb6",
"title": "requestId"
},
{
"value": "Provisional data are subject to revision. Go to http://waterdata.usgs.gov/nwis/help/?provisional for more information.",
"title": "disclaimer"
},
{
"value": "vaas01",
"title": "server"
}
]
},
"timeSeries": [
{
"sourceInfo": {
"siteName": "CONNECTICUT RIVER AT NORTH STRATFORD, NH",
"siteCode": [
{
"value": "01129500",
"network": "NWIS",
"agencyCode": "USGS"
}
],
"timeZoneInfo": {
"defaultTimeZone": {
"zoneOffset": "-05:00",
"zoneAbbreviation": "EST"
},
"daylightSavingsTimeZone": {
"zoneOffset": "-04:00",
"zoneAbbreviation": "EDT"
},
"siteUsesDaylightSavingsTime": true
},
"geoLocation": {
"geogLocation": {
"srs": "EPSG:4326",
"latitude": 44.74977166,
"longitude": -71.63120018
},
"localSiteXY": []
},
"note": [],
"siteType": [],
"siteProperty": [
{
"value": "ST",
"name": "siteTypeCd"
},
{
"value": "01080101",
"name": "hucCd"
},
{
"value": "33",
"name": "stateCd"
},
{
"value": "33007",
"name": "countyCd"
}
]
},
"variable": {
"variableCode": [
{
"value": "00060",
"network": "NWIS",
"vocabulary": "NWIS:UnitValues",
"variableID": 45807197,
"default": true
}
],
"variableName": "Streamflow, ft³/s",
"variableDescription": "Discharge, cubic feet per second",
"valueType": "Derived Value",
"unit": {
"unitCode": "ft3/s"
},
"options": {
"option": [
{
"name": "Statistic",
"optionCode": "00000"
}
]
},
"note": [],
"noDataValue": -999999,
"variableProperty": [],
"oid": "45807197"
},
"values": [
{
"value": [
{
"value": "2550",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T18:00:00.000-05:00"
},
{
"value": "2550",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T18:15:00.000-05:00"
},
{
"value": "2520",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T18:30:00.000-05:00"
},
{
"value": "2520",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T18:45:00.000-05:00"
},
{
"value": "2520",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T19:00:00.000-05:00"
},
{
"value": "2520",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T19:15:00.000-05:00"
},
{
"value": "2500",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T19:30:00.000-05:00"
},
{
"value": "2500",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T19:45:00.000-05:00"
},
{
"value": "2500",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T20:00:00.000-05:00"
},
{
"value": "2500",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T20:15:00.000-05:00"
},
{
"value": "2500",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T20:30:00.000-05:00"
},
{
"value": "2490",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T20:45:00.000-05:00"
},
{
"value": "2490",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T21:00:00.000-05:00"
},
{
"value": "2490",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T21:15:00.000-05:00"
},
{
"value": "2490",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T21:30:00.000-05:00"
},
{
"value": "2490",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T21:45:00.000-05:00"
},
{
"value": "2470",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T22:00:00.000-05:00"
},
{
"value": "2470",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T22:15:00.000-05:00"
},
{
"value": "2450",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T22:30:00.000-05:00"
},
{
"value": "2450",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T22:45:00.000-05:00"
},
{
"value": "2450",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T23:00:00.000-05:00"
},
{
"value": "2450",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T23:15:00.000-05:00"
},
{
"value": "2450",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T23:30:00.000-05:00"
},
{
"value": "2450",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T23:45:00.000-05:00"
},
{
"value": "2450",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T00:00:00.000-05:00"
},
{
"value": "2470",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T00:15:00.000-05:00"
},
{
"value": "2470",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T00:30:00.000-05:00"
},
{
"value": "2470",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T00:45:00.000-05:00"
},
{
"value": "2450",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T01:00:00.000-05:00"
},
{
"value": "2450",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T01:15:00.000-05:00"
},
{
"value": "2470",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T01:30:00.000-05:00"
},
{
"value": "2470",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T01:45:00.000-05:00"
},
{
"value": "2470",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T02:00:00.000-05:00"
},
{
"value": "2490",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T02:15:00.000-05:00"
},
{
"value": "2490",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T02:30:00.000-05:00"
},
{
"value": "2500",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T02:45:00.000-05:00"
},
{
"value": "2500",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T03:00:00.000-05:00"
}
],
"qualifier": [
{
"qualifierCode": "P",
"qualifierDescription": "Provisional data subject to revision.",
"qualifierID": 0,
"network": "NWIS",
"vocabulary": "uv_rmk_cd"
}
],
"qualityControlLevel": [],
"method": [
{
"methodDescription": "",
"methodID": 66577
}
],
"source": [],
"offset": [],
"sample": [],
"censorCode": []
}
],
"name": "USGS:01129500:00060:00000"
}
]
},
"nil": false,
"globalScope": true,
"typeSubstituted": false
}
如何获取带有标签 "value" 的所有信息并将这些数字存储到数据结构中,然后我可以在其上执行函数?
谢谢
这个问题与繁忙的解析无关,json 本身也没有那么大。您可以遍历 $data['value']['timeSeries'][0]['values'][0]['value']
并提取所需的所有内容。
$data = json_decode($json, true);
$t = [];
foreach ($data['value']['timeSeries'][0]['values'][0]['value'] as $item) {
$t[] = $item['value'];
}
如果您需要不同的键,只需查看 json 数据并修改循环即可。如果您需要唯一键,请在 $t
var.
上使用 array_unique
天真的做法是简单的递归操作:
$arr = json_decode($json,true);
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr), RecursiveIteratorIterator::SELF_FIRST);
$values = [];
foreach ( $iterator as $key => $value ) {
if ($key === "value" && !is_array($value)) {
$values[] = $value;
}
}
示例:http://sandbox.onlinephpfunctions.com/code/b36d70d84926d9b5ca9989c9ba96b34fe1f2a7b6
我正在尝试通过 php 从相当大的 JSON 文件中提取数据值。该文件来自 USGS 服务器,包含大量我不需要的信息,我只是想获取数据值,而不是所有元数据。我从来没有处理过 JSON 这么大的文件,因为我对它们的格式还很陌生。
{
"name": "ns1:timeSeriesResponseType",
"declaredType": "org.cuahsi.waterml.TimeSeriesResponseType",
"scope": "javax.xml.bind.JAXBElement$GlobalScope",
"value": {
"queryInfo": {
"queryURL": "http://waterservices.usgs.gov/nwis/iv/format=json&sites=01129500&startDT=2017-11-05T18:00-0500&endDT=2017-11-06T03:00-0500¶meterCd=00060&siteStatus=all",
"criteria": {
"locationParam": "[ALL:01129500]",
"variableParam": "[00060]",
"timeParam": {
"beginDateTime": "2017-11-05T23:00:00.000",
"endDateTime": "2017-11-06T08:00:00.000"
},
"parameter": []
},
"note": [
{
"value": "[ALL:01129500]",
"title": "filter:sites"
},
{
"value": "[mode=RANGE, modifiedSince=null] interval={INTERVAL[2017-11-05T23:00:00.000Z/2017-11-06T08:00:00.000Z]}",
"title": "filter:timeRange"
},
{
"value": "methodIds=[ALL]",
"title": "filter:methodId"
},
{
"value": "2017-11-06T21:03:28.078Z",
"title": "requestDT"
},
{
"value": "efbacfd0-c335-11e7-9d73-6cae8b663fb6",
"title": "requestId"
},
{
"value": "Provisional data are subject to revision. Go to http://waterdata.usgs.gov/nwis/help/?provisional for more information.",
"title": "disclaimer"
},
{
"value": "vaas01",
"title": "server"
}
]
},
"timeSeries": [
{
"sourceInfo": {
"siteName": "CONNECTICUT RIVER AT NORTH STRATFORD, NH",
"siteCode": [
{
"value": "01129500",
"network": "NWIS",
"agencyCode": "USGS"
}
],
"timeZoneInfo": {
"defaultTimeZone": {
"zoneOffset": "-05:00",
"zoneAbbreviation": "EST"
},
"daylightSavingsTimeZone": {
"zoneOffset": "-04:00",
"zoneAbbreviation": "EDT"
},
"siteUsesDaylightSavingsTime": true
},
"geoLocation": {
"geogLocation": {
"srs": "EPSG:4326",
"latitude": 44.74977166,
"longitude": -71.63120018
},
"localSiteXY": []
},
"note": [],
"siteType": [],
"siteProperty": [
{
"value": "ST",
"name": "siteTypeCd"
},
{
"value": "01080101",
"name": "hucCd"
},
{
"value": "33",
"name": "stateCd"
},
{
"value": "33007",
"name": "countyCd"
}
]
},
"variable": {
"variableCode": [
{
"value": "00060",
"network": "NWIS",
"vocabulary": "NWIS:UnitValues",
"variableID": 45807197,
"default": true
}
],
"variableName": "Streamflow, ft³/s",
"variableDescription": "Discharge, cubic feet per second",
"valueType": "Derived Value",
"unit": {
"unitCode": "ft3/s"
},
"options": {
"option": [
{
"name": "Statistic",
"optionCode": "00000"
}
]
},
"note": [],
"noDataValue": -999999,
"variableProperty": [],
"oid": "45807197"
},
"values": [
{
"value": [
{
"value": "2550",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T18:00:00.000-05:00"
},
{
"value": "2550",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T18:15:00.000-05:00"
},
{
"value": "2520",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T18:30:00.000-05:00"
},
{
"value": "2520",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T18:45:00.000-05:00"
},
{
"value": "2520",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T19:00:00.000-05:00"
},
{
"value": "2520",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T19:15:00.000-05:00"
},
{
"value": "2500",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T19:30:00.000-05:00"
},
{
"value": "2500",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T19:45:00.000-05:00"
},
{
"value": "2500",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T20:00:00.000-05:00"
},
{
"value": "2500",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T20:15:00.000-05:00"
},
{
"value": "2500",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T20:30:00.000-05:00"
},
{
"value": "2490",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T20:45:00.000-05:00"
},
{
"value": "2490",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T21:00:00.000-05:00"
},
{
"value": "2490",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T21:15:00.000-05:00"
},
{
"value": "2490",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T21:30:00.000-05:00"
},
{
"value": "2490",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T21:45:00.000-05:00"
},
{
"value": "2470",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T22:00:00.000-05:00"
},
{
"value": "2470",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T22:15:00.000-05:00"
},
{
"value": "2450",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T22:30:00.000-05:00"
},
{
"value": "2450",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T22:45:00.000-05:00"
},
{
"value": "2450",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T23:00:00.000-05:00"
},
{
"value": "2450",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T23:15:00.000-05:00"
},
{
"value": "2450",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T23:30:00.000-05:00"
},
{
"value": "2450",
"qualifiers": [
"P"
],
"dateTime": "2017-11-05T23:45:00.000-05:00"
},
{
"value": "2450",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T00:00:00.000-05:00"
},
{
"value": "2470",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T00:15:00.000-05:00"
},
{
"value": "2470",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T00:30:00.000-05:00"
},
{
"value": "2470",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T00:45:00.000-05:00"
},
{
"value": "2450",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T01:00:00.000-05:00"
},
{
"value": "2450",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T01:15:00.000-05:00"
},
{
"value": "2470",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T01:30:00.000-05:00"
},
{
"value": "2470",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T01:45:00.000-05:00"
},
{
"value": "2470",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T02:00:00.000-05:00"
},
{
"value": "2490",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T02:15:00.000-05:00"
},
{
"value": "2490",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T02:30:00.000-05:00"
},
{
"value": "2500",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T02:45:00.000-05:00"
},
{
"value": "2500",
"qualifiers": [
"P"
],
"dateTime": "2017-11-06T03:00:00.000-05:00"
}
],
"qualifier": [
{
"qualifierCode": "P",
"qualifierDescription": "Provisional data subject to revision.",
"qualifierID": 0,
"network": "NWIS",
"vocabulary": "uv_rmk_cd"
}
],
"qualityControlLevel": [],
"method": [
{
"methodDescription": "",
"methodID": 66577
}
],
"source": [],
"offset": [],
"sample": [],
"censorCode": []
}
],
"name": "USGS:01129500:00060:00000"
}
]
},
"nil": false,
"globalScope": true,
"typeSubstituted": false
}
如何获取带有标签 "value" 的所有信息并将这些数字存储到数据结构中,然后我可以在其上执行函数?
谢谢
这个问题与繁忙的解析无关,json 本身也没有那么大。您可以遍历 $data['value']['timeSeries'][0]['values'][0]['value']
并提取所需的所有内容。
$data = json_decode($json, true);
$t = [];
foreach ($data['value']['timeSeries'][0]['values'][0]['value'] as $item) {
$t[] = $item['value'];
}
如果您需要不同的键,只需查看 json 数据并修改循环即可。如果您需要唯一键,请在 $t
var.
array_unique
天真的做法是简单的递归操作:
$arr = json_decode($json,true);
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr), RecursiveIteratorIterator::SELF_FIRST);
$values = [];
foreach ( $iterator as $key => $value ) {
if ($key === "value" && !is_array($value)) {
$values[] = $value;
}
}
示例:http://sandbox.onlinephpfunctions.com/code/b36d70d84926d9b5ca9989c9ba96b34fe1f2a7b6