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

如何从多层嵌套JSON中取值并存储为PHP变量用于SQL入库?

从多层嵌套JSON提取值并存入PHP+SQL的实现方法

当然可行啦!多层嵌套JSON的取值其实没你想的那么复杂,我来一步步给你捋清楚怎么做~

步骤1:解析JSON为PHP可操作的结构

首先你得把JSON字符串转换成PHP能直接访问的数组或者对象,这一步用json_decode()函数就能搞定:

  • 如果转成关联数组(推荐新手用,键名访问更直观),就在第二个参数传true:
// 假设你的JSON数据存在$jsonString变量里
$jsonData = json_decode($jsonString, true);

// 可以先打印看看结构,方便排查问题
// print_r($jsonData);
  • 如果转成对象,就不用传第二个参数,用->访问属性:
$jsonData = json_decode($jsonString);

步骤2:提取嵌套的目标值

根据你给出的JSON结构,features大概率是一个数组(比如常见的GeoJSON格式里features都是数组元素),所以提取值的时候要注意层级:

用关联数组的写法:

// 先确保层级存在,避免报错
if (isset($jsonData['features'][0]['attributes'])) {
    // 提取并清理前后空格(你的示例值有多余空格)
    $masterIncidentNum = trim($jsonData['features'][0]['attributes']['Master_Incident_Number']);
    $incidentType = trim($jsonData['features'][0]['attributes']['IncidentType']);
} else {
    // 处理结构不存在的情况,比如给默认值或者抛出提示
    $masterIncidentNum = null;
    $incidentType = null;
}

用对象的写法:

if (isset($jsonData->features[0]->attributes)) {
    $masterIncidentNum = trim($jsonData->features[0]->attributes->Master_Incident_Number);
    $incidentType = trim($jsonData->features[0]->attributes->IncidentType);
} else {
    $masterIncidentNum = null;
    $incidentType = null;
}

小提醒:如果你的features不是数组,而是单个对象,就去掉[0]直接访问就行~

步骤3:将变量存入SQL数据库

这里一定要用预处理语句!绝对不要直接把变量拼进SQL字符串里,不然容易被SQL注入攻击,安全性极低。下面给你用PDO(PHP数据对象,推荐的数据库操作方式)的示例:

// 1. 连接数据库(替换成你的数据库信息)
$dsn = 'mysql:host=你的数据库地址;dbname=数据库名;charset=utf8mb4';
$username = '用户名';
$password = '密码';

try {
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die('数据库连接失败:' . $e->getMessage());
}

// 2. 准备预处理SQL语句(假设你的表名是incidents,字段对应)
$sql = "INSERT INTO incidents (master_incident_number, incident_type) VALUES (:masterNum, :incidentType)";
$stmt = $pdo->prepare($sql);

// 3. 绑定变量并执行
$stmt->bindParam(':masterNum', $masterIncidentNum, PDO::PARAM_STR);
$stmt->bindParam(':incidentType', $incidentType, PDO::PARAM_STR);
$stmt->execute();

echo '数据存入成功!';

额外注意事项

  • 一定要检查json_decode()的返回值,如果JSON格式错误,它会返回null,可以用json_last_error()排查问题;
  • 提取值前用isset()或者array_key_exists()检查层级是否存在,避免出现「Undefined index」或者「Undefined property」的错误;
  • 存入数据库前记得做数据验证,比如确认$masterIncidentNum不为空,或者符合预期格式,保证数据的有效性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 07:57:30