如何使用PHP正确生成符合规范格式的JSON数据
问题原因
你当前的写法是循环内对单条数据单独做JSON编码后直接拼接字符串,最终会得到多个独立JSON对象拼接的结果,缺少外层统一的大括号,也没有对象属性之间的逗号分隔,自然不符合JSON规范。
同时原有代码存在潜在报错风险:json_decode 默认返回对象,直接用$row[0]这种数组下标方式访问属性会抛出错误。
修复后代码
$url = 'data.json'; $json_string = file_get_contents($url); // 第二个参数传true,将JSON解析为关联数组,适配后续数组下标访问逻辑 $json = json_decode($json_string, true); $rows = $json['values']; // 初始化空的结果数组,统一存储所有数据 $result = []; foreach ($rows as $row) { // 循环内只往结果数组追加键值对,不做JSON编码 $result[$row[0]] = [ "name" => $row[1], "value" => $row[2], "conso" => $row[3], "ml" => $row[4] ]; } // 所有数据组装完成后,一次性对整个数组做JSON编码 // 加JSON_PRETTY_PRINT参数可以输出格式化的易读JSON,不需要可以去掉 $jsonf = json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
效果说明
最终$jsonf就是你需要的单完整JSON对象,结构完全符合你给出的期望格式。
内容的提问来源于stack exchange,提问作者Creatz
相关产品推荐
相关产品推荐

