PHP解析可变JSON为HTML表格报错问题修复咨询
问题原因
报错的核心是$request_2中存在非嵌套结构的键值对:比如"Ex. Directo Gram":"Negativo",该键对应的值是字符串而非数组。原代码默认所有section对应的$values都是数组,直接执行foreach($values)时,字符串无法被遍历,因此抛出foreach() argument must be of type array|object警告。
另外注意:$request_2的JSON存在语法错误——"Leucócitos": 15 - 25 /campo没有用双引号包裹值,会导致json_decode解析失败,需先修正为"Leucócitos": "15 - 25 /campo"。
修复方案
修改代码,在遍历每个section的$values前,先判断其是否为数组:
- 若为数组:按原逻辑遍历子键值对,生成
section/name的表头和对应值 - 若为非数组(字符串/数值等):直接将section名作为表头的一部分,值作为单元格内容
修复后的完整代码
// 先修正$request_2的JSON语法错误 $request_2 = '{ "URINA II (Exame Sumário da Urina)": { "Cor": "Amarela", "Aspecto": "Límpido", "Densidade": "1.021", "pH": "7.0", "Proteínas": "Vestígios", "Glucose": "Negativo", "Corpos Cetónicos": "Negativo", "Urobilinogénio": "Negativo", "Bilirrubina": "Negativo", "Nitritos": "Negativo", "Esterase leucocitária (Leucócitos)": "+ +", "Hemoglobina": "+ +" }, "Exame do Sedimento": { "Células Epiteliais": "0-2/campo", "Leucócitos": "15 - 25 /campo", " Eritrócitos ":"15-25/campo" }, "Urina, Exame Microbiológico (Urocultura)": { "Células epiteliais":"0-2/campo", "Leucócitos":"15 - 25/campo", "Eritrócitos":"15-25/campo" }, "Ex. Directo Gram":"Negativo", "URINA E DOSEAMENTOS URINÁRIOS": { "Ex. Cultural Resultado":"Negativo" } }'; $obj = json_decode($request_2, true); // 先校验JSON解析是否成功 if (!is_array($obj)) { echo "JSON解析失败"; exit; } echo '<table border="1">'; echo '<thead><tr>'; foreach ($obj as $section => $values) { if (is_array($values)) { foreach ($values as $name => $result) { echo "<th>{$section}/{$name}</th>"; } } else { // 非数组值,直接用section作为表头 echo "<th>{$section}</th>"; } } echo '</tr></thead>'; echo '<tbody><tr>'; foreach ($obj as $values) { if (is_array($values)) { foreach ($values as $result) { echo "<td>{$result}</td>"; } } else { // 非数组值直接输出 echo "<td>{$values}</td>"; } } echo '</tr></tbody>'; echo '</table>';
关键说明
- JSON校验:添加
is_array($obj)判断,避免JSON解析失败时后续代码报错 - 类型判断:用
is_array($values)区分嵌套数组和直接值,分别处理表头和单元格内容 - JSON语法修正:将
$request_2中未加引号的数值修正为字符串,确保json_decode能正确解析
内容的提问来源于stack exchange,提问作者Antonio Da Silva
相关产品推荐
相关产品推荐

