本文详解如何用 php 灵活解析结构不固定的 json 数据(如嵌套对象或混合值类型),自动生成语义清晰、格式统一的 html 表格,兼容多层级键值对、纯字符串字段及空/无效数据场景。
本文详解如何用 php 灵活解析结构不固定的 json 数据(如嵌套对象或混合值类型),自动生成语义清晰、格式统一的 html 表格,兼容多层级键值对、纯字符串字段及空/无效数据场景。
在医疗报告、实验室检测结果等实际业务中,JSON 数据结构常因检测项目不同而动态变化:有的键对应完整对象(如 "Hemograma": { ... }),有的则直接为字符串值(如 "Ex. Directo Gram": "Negativo")。原始代码假设所有子项均为数组,导致 foreach() 在遇到字符串值时抛出 Warning: foreach() argument must be of type array|object, null given 错误。根本原因在于未做类型判断与分支处理。
✅ 正确处理逻辑:双阶段类型感知遍历
核心思路是两次遍历 + 类型判断:
- 第一遍构建表头():对每个顶级键(如 "URINA II (Exame Sumário da Urina)"),检查其值是否为数组;若是,则拼接 主键/子键 作为
;若为字符串,则直接用主键作为 。 - 第二遍填充数据():同理判断值类型——数组则遍历其所有值生成
;字符串则直接输出为 。 以下为健壮、可复用的完整实现:
<?php function jsonToHtmlTable($jsonString): string { $data = json_decode($jsonString, true); // 安全校验:确保 JSON 解析成功且为数组 if (json_last_error() !== JSON_ERROR_NONE || !is_array($data)) { return '<p class="error">Invalid or empty JSON data.'; } ob_start(); ?>$value): ?> = htmlspecialchars("{$section}/{$field}") ?> = htmlspecialchars($section) ?> = htmlspecialchars((string)$cell) ?> = htmlspecialchars((string)$value) ?> ⚠️ 关键注意事项
- JSON 格式校验:$request_2 原始内容存在语法错误(如 15 - 25 /campo 缺少引号),PHP json_decode() 会返回 null。务必先用 json_last_error() 检查解析状态,避免后续逻辑崩溃。
- XSS 防护:所有输出均通过 htmlspecialchars() 转义,防止恶意 HTML/JS 注入。
- 空值与类型安全:使用 (string)$cell 强制转换确保数值、布尔值等能正确渲染;对非数组值直接输出,避免 foreach(null) 报错。
- 语义化增强:建议为表格添加 border、class 及 scope="col" 属性(可扩展),提升可访问性与样式控制能力。
该方案完全解耦于具体 JSON 结构,无论是单层扁平化字段(如 "Ex. Directo Gram": "Negativo")还是多级嵌套对象(如 "URINA II": { "Cor": "Amarela", ... }),均可自动适配生成规范表格,真正实现“一次编码,多态兼容”。
- 第二遍填充数据():同理判断值类型——数组则遍历其所有值生成
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











