如何在PHP中解析嵌套数组中的JSON数据

时间:2017-08-13 02:03:24

标签: javascript php json loops

我正在努力从格式如下的JSON文件中检索一些值:

{
"@context": [
    "https://raw.githubusercontent.com/geojson/geojson-ld/master/contexts/geojson-base.jsonld",
    {
        "wx": "https://api.weather.gov/ontology#",
        "@vocab": "https://api.weather.gov/ontology#"
    }
],
"type": "FeatureCollection",
"features": [
    {
        "id": "https://api.weather.gov/alerts/NWS-IDP-PROD-2485131-2320093",
        "type": "Feature",
        "geometry": {
            "type": "Polygon",
            "coordinates": [
                [
                    [
                        -95.45,
                        32.36
                    ],
                    [
                        -96.07,
                        32.36
                    ],
                    [
                        -96.08,
                        32.76
                    ],
                    [
                        -95.92,
                        32.82
                    ],
                    [
                        -95.85,
                        32.77
                    ],
                    [
                        -95.77,
                        32.77
                    ],
                    [
                        -95.76,
                        32.75
                    ],
                    [
                        -95.71,
                        32.75
                    ],
                    [
                        -95.66,
                        32.71
                    ],
                    [
                        -95.64,
                        32.72
                    ],
                    [
                        -95.59,
                        32.68
                    ],
                    [
                        -95.6,
                        32.48
                    ],
                    [
                        -95.47,
                        32.37
                    ],
                    [
                        -95.45,
                        32.36
                    ]
                ]
            ]
        },
        "properties": {
            "@id": "https://api.weather.gov/alerts/NWS-IDP-PROD-2485131-2320093",
            "@type": "wx:Alert",
            "id": "NWS-IDP-PROD-2485131-2320093",
            "areaDesc": "Van Zandt",
            "geocode": {
                "UGC": [
                    "TXC467"
                ],
                "SAME": [
                    "048467"
                ]
            },
            "references": [],
            "sent": "2017-08-13T00:03:41+00:00",
            "effective": "2017-08-13T00:03:41+00:00",
            "onset": "2017-08-13T00:03:00+00:00",
            "expires": "2017-08-13T01:00:00+00:00",
            "ends": "2017-08-13T01:00:00+00:00",
            "status": "Actual",
            "messageType": "Alert",
            "category": "Met",
            "severity": "Severe",
            "certainty": "Observed",
            "urgency": "Immediate",
            "event": "Severe Thunderstorm Warning",
            "sender": "NWS Fort Worth TX",
            "headline": "Severe Thunderstorm Warning issued August 12 at 7:03PM CDT expiring August 12 at 8:00PM CDT by NWS Fort Worth TX",
            "description": "The National Weather Service in Fort Worth has issued a\n\n* Severe Thunderstorm Warning for...\nVan Zandt County in north central Texas...\n\n* Until 800 PM CDT.\n\n* At 703 PM CDT, a severe thunderstorm was located near Wills Point,\nmoving east at 25 mph.\n\nHAZARD...65 mph wind gusts and quarter size hail.\n\nSOURCE...Radar indicated.\n\nIMPACT...Hail damage to vehicles is expected. Expect wind damage\nto roofs, siding, and trees.\n\n* This severe thunderstorm will be near,\nCanton around 710 PM CDT.\nEdgewood around 715 PM CDT.\nFruitvale around 725 PM CDT.\nGrand Saline around 735 PM CDT.\nVan around 750 PM CDT.\n\nThis includes Interstate 20 between mile markers 513 and 542.",
            "instruction": "For your protection get inside a sturdy structure and stay away from\nwindows.\n\nContinuous cloud to ground lightning is occurring with this storm.\nMove indoors immediately. Lightning can kill.\n\nHeavy rainfall is occurring with this storm, and may lead to flash\nflooding. Do not drive your vehicle through flooded roadways.",
            "response": "Shelter",
            "parameters": {
                "eventMotionDescription": [
                    "2017-08-13T00:03:00.000-05:00...storm...277DEG...23KT...32.62,-95.97"
                ],
                "hailSize": [
                    "1.00"
                ],
                "windGust": [
                    65
                ],
                "tornadoDetection": [
                    "POSSIBLE"
                ],
                "VTEC": [
                    "/O.NEW.KFWD.SV.W.0313.170813T0003Z-170813T0100Z/"
                ],
                "EAS-ORG": [
                    "WXR"
                ],
                "PIL": [
                    "FWDSVRFWD"
                ],
                "BLOCKCHANNEL": [
                    "CMAS",
                    "EAS",
                    "NWEM"
                ],
                "eventEndingTime": [
                    "2017-08-13T01:00:00Z"
                ]
            }
        }
    },

我试图从“属性”键下的键中获取值。我正在努力的是数组是否以@context或“features”下嵌套的“properties”开头?我不熟悉使用@键的JSON数据。

我需要更多的价值观。但对于初学者,我只是使用嵌套在“功能”下的事件键 - > “属性”,其中我需要的值的大多数键。我没有从中得到输出。

    <?php

$url = 'http://stream.dfwstormforce.com/json/nat_alerts.json'; // path to your JSON file
$data = file_get_contents($url); // put the contents of the file into a variable
$result = json_decode($data, true); // decode the JSON feed


foreach($results as $result) {
    dump($result); //this will dump the array
    foreach($results['features'] as $data) {
        dump($data['event']);
    }
}

?>

-Thanks

编辑:为json_decode

的代码添加了建议

3 个答案:

答案 0 :(得分:1)

正如其他人所说,如果你想把结果作为一个关联数组,你需要将true作为第二个参数传递给json_decode

层次结构是要素/属性/事件,因此您可以查看要素并从每个要素的属性中提取所需内容。

<?php
$url = 'http://stream.dfwstormforce.com/json/nat_alerts.json'; // path to your JSON file
$data = file_get_contents($url); // put the contents of the file into a variable
$results = json_decode($data, true); // decode the JSON feed

foreach($results['features'] as $currFeature)
{
    $currEvent = $currFeature['properties']['event'];
    echo $currEvent."\n";
}

答案 1 :(得分:0)

使用json_decode($data, true)true告诉json_decode返回嵌套的关联数组而不是对象。

答案 2 :(得分:0)

正如BarNakedCoder所说: json_decode($data, true) 但你还需要替​​换

dump($data['event']

with:

dump($data[0]['event'])