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

Laravel中JSON存储与解析失败问题求助

问题解决:存储/读取JSON数据失败的修复方案

问题根源

你的核心问题出在JSON数据的生成方式:插入数据时手动拼接类似JSON的字符串,再套json_encode,导致最终存储的是格式无效的JSON(本质是转义后的错误字符串),后续读取时无法正常解析为对象/数组。同时读取代码也存在语法错误和逻辑问题。


修复步骤

1. 修复插入数据的Model代码

放弃手动拼接字符串,直接构造PHP数组,再用json_encode生成标准JSON字符串:

public static function insertPlotDetails($data){
    $PlotDetails = array();
    $PlotDetails['L_Name'] = $data['Plot'];
    $PlotDetails['L_Owner'] = $data['Owner'];
    $PlotDetails['L_Spice'] = $data['Spice'];
    $PlotDetails['L_AreaAcre'] = $data['Area'];
    $PlotDetails['L_AreaHa'] = 0;
    $PlotDetails['L_ProducedAmt_Kg'] = $data['PdAmount'];
    $PlotDetails['L_District'] = $data['District'];
    $PlotDetails['L_Block'] = $data['Block'];
    $PlotDetails['L_Village'] = $data['Village'];
    $PlotDetails['lat'] = $data['Latitude'];
    $PlotDetails['lng'] = $data['Longitude'];
    $PlotDetails['img'] = $data['ImageUpload'];

    // 构造标准PHP数组,再转JSON
    $PlotDetails['PdArea_JSON'] = json_encode([
        'TotalProduction' => [
            'PlotName' => $data['Plot'],
            'Area' => [
                [
                    'Name' => 'Main',
                    'Variant' => [
                        [
                            'IISR_Varada' => $data['IISR_Varada'],
                            'IISR_Mahima' => $data['IISR_Mahima'],
                            'Nadia_Nagaland' => $data['Nadia_Nagaland'],
                            'Nadia_Odisha' => $data['Nadia_Odisha'],
                            'Karbi' => $data['Karbi'],
                            'Local' => $data['Local']
                        ]
                    ]
                ],
                [
                    'Name' => 'Trial',
                    'Variant' => [
                        [
                            'IISR_Varada' => $data['T_IISR_Varada'],
                            'IISR_Mahima' => $data['T_IISR_Mahima'],
                            'Nadia_Nagaland' => $data['T_Nadia_Nagaland'],
                            'Nadia_Odisha' => $data['T_Nadia_Odisha'],
                            'Karbi' => $data['T_Karbi'],
                            'Local' => $data['T_Local']
                        ]
                    ]
                ]
            ]
        ]
    ]);

    try {
        $PlotDetails_response = DB::table('locationdb')->insert($PlotDetails);
    } catch (\Exception $e) {
        return $e->getMessage();
    }
   
    return $PlotDetails_response;
}

2. 修复读取JSON的代码

先将数据库返回的JSON字符串解析为对象/数组,再正确访问字段:

public function GetJsonTest()
{
    $data = MapModel::GetJsonTest();
    $jsonString = $data[0]->PdArea_JSON;
    
    // 解析为对象(第二个参数传true则解析为数组)
    $jsonObj = json_decode($jsonString);

    // 检查解析是否成功
    if (!$jsonObj) {
        dd('JSON解析失败:' . json_last_error_msg());
    }

    // 访问TotalProduction下的Area字段示例
    $totalProduction = $jsonObj->TotalProduction;
    $areas = $totalProduction->Area;
    
    foreach ($areas as $area) {
        echo "区域名称:{$area->Name}<br>";
        foreach ($area->Variant as $variant) {
            echo "IISR_Varada:{$variant->IISR_Varada}<br>";
            echo "IISR_Mahima:{$variant->IISR_Mahima}<br>";
            // 其他Variant字段同理
        }
    }

    // 调试查看完整数据
    dd($totalProduction);
}

关键说明

  • 手动拼接JSON字符串极易出现引号不匹配、格式错误,必须通过PHP数组+json_encode生成标准JSON。
  • 读取时如果解析失败,用json_last_error_msg()可以快速定位JSON格式问题(比如引号错误、语法不完整)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:24:54