You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP读取ArcGIS JSON数据报错:Illegal string offset 'features'排查

如何正确读取ArcGIS服务JSON中的features->attributes->GEN字段?

我尝试读取ArcGIS服务返回的JSON文件以获取features中的GEN字段,但执行代码时出现错误:

Warning: Illegal string offset 'features'

返回的数据结构包含objectIdFieldName、fields、features等字段,features数组内的attributes子数组存有GEN、cases、deaths数据。我的PHP代码如下:

$url = "https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=GEN%20%3D%20%27CELLE%27&outFields=GEN,cases,deaths&outSR=4326&f=json";
$json = file_get_contents($url);
$data = json_decode($json,true);
print '<pre>';
print_r($data);
foreach($data as $row){
    echo $row['features']->$row['attributes']->$row['GEN'];
}

想请教读取逻辑哪里出错,如何正确获取features->attributes->GEN的值?


问题出在这几个关键地方:

  1. 遍历对象错误:你直接遍历了整个$data数组,但features本身就是$data里的一个子数组,完全不需要遍历整个$data,应该直接遍历$data['features']。
  2. 混合数组与对象语法:你用json_decode($json, true)把JSON转成了关联数组,但后面却误用了对象访问的->语法——既然转成了数组,就全程用数组的['key']方式访问才对。
  3. 层级路径完全搞反:正确的访问路径是$data['features'](要素数组)→ 每个要素里的attributes(属性子数组)→ GEN字段,你的代码把这个层级完全颠倒了。

修正后的可运行代码:

$url = "https://services7.arcgis.com/mOBPykOjAyBO2ZKk/arcgis/rest/services/RKI_Landkreisdaten/FeatureServer/0/query?where=GEN%20%3D%20%27CELLE%27&outFields=GEN,cases,deaths&outSR=4326&f=json";
$json = file_get_contents($url);
$data = json_decode($json, true);

// 先做安全校验,避免空数据或格式错误导致报错
if (isset($data['features']) && is_array($data['features'])) {
    foreach ($data['features'] as $feature) {
        // 直接访问attributes里的GEN字段
        echo $feature['attributes']['GEN'] . '<br>';
        // 如果需要同时输出cases和deaths,可以用下面的写法
        // echo "区域:{$feature['attributes']['GEN']},确诊数:{$feature['attributes']['cases']},死亡数:{$feature['attributes']['deaths']}<br>";
    }
} else {
    echo "未找到有效features数据或返回格式异常";
}

额外说明:

  • 原URL里的&amp;是HTML转义后的符号,建议改成标准URL的&,避免潜在的解析问题。
  • 加入isset()和is_array()的校验是为了鲁棒性——如果服务返回空数据或格式变化,代码不会直接报错,而是给出友好提示。

内容的提问来源于stack exchange,提问作者Boszor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 08:47:44