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

从JSON获取tb_procedimento值时触发非法字符串偏移错误,如何解决?

解决JSON提取tb_procedimento值的问题

嘿,你这个问题我之前也碰到过!根源在于你拿到的$values还是纯JSON字符串,不是PHP能直接操作的数组,所以直接用['data']去访问才会抛出「Illegal string offset 'data'」的错误。我给你一步步拆解解决方案:

1. 先把JSON字符串转成PHP关联数组

首先必须用json_decode()函数把JSON字符串解码成PHP可以操作的结构,记得加上第二个参数true,这样会转成关联数组(默认是对象,操作起来不如数组方便):

// 假设$values是你获取到的JSON字符串
$decodedData = json_decode($values, true);

2. 处理动态的行数据

你的data字段是一个数组,里面的每个元素就是一行数据(不管DT_RowId是row_6还是其他动态值,我们完全不需要关心这个字段):

  • 如果只有一行数据,直接取数组的第一个元素即可:
    $rowContent = $decodedData['data'][0];
    
  • 如果有多行数据,用循环遍历$decodedData['data']就能处理每一行:
    foreach ($decodedData['data'] as $row) {
        // 这里处理每一行的逻辑
    }
    

3. 提取tb_procedimento的值

从行数据里找到importa_sigtap子数组,直接取出tb_procedimento的值就行:

$tbProcedimentoValue = $rowContent['importa_sigtap']['tb_procedimento'];
// 验证结果
var_dump($tbProcedimentoValue); // 会输出 string(1) "4"

完整可运行示例

把所有步骤整合起来,还加了空值判断避免报错:

// 你的原始JSON字符串
$values = '{"data":[{"DT_RowId":"row_6","importa_sigtap":{"id":"6","rl_procedimento_ocupacao":"5","tb_procedimento":"4","tb_forma_organizacao":"6"}}]}';

// 解码JSON为关联数组
$decodedData = json_decode($values, true);

// 确保data数组存在且不为空
if (isset($decodedData['data']) && !empty($decodedData['data'])) {
    // 取第一行数据
    $firstRow = $decodedData['data'][0];
    // 提取目标值
    $targetValue = $firstRow['importa_sigtap']['tb_procedimento'];
    echo "tb_procedimento的值是:" . $targetValue;
} else {
    echo "未找到有效数据";
}

额外小提示

  • 如果解码失败,可以用json_last_error()和json_last_error_msg()排查问题,比如JSON格式是否有语法错误。
  • 生产环境里建议加上isset()判断,避免因为字段缺失导致报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:47:29