如何过滤JSON数据并筛选status为TF的条目?PHP代码修改需求
实现JSON数据按status过滤并统计数量
没问题,我来帮你调整代码,实现只保留status为TF的条目,同时统计过滤后的数量。先给你完整的可运行代码,再一步步解释:
<?php // 读取JSON文件内容 $jsonResult = file_get_contents('1.json'); if (!$jsonResult) { die("无法读取JSON文件"); } // 将JSON解码为关联数组(第二个参数传true更方便后续数组操作) $contentJson = json_decode($jsonResult, true); // 检查解码是否成功(注意原JSON里有多余的尾逗号,会导致解码失败,需要先修正) if (json_last_error() !== JSON_ERROR_NONE) { die("JSON解码失败:" . json_last_error_msg()); } // 过滤出status严格等于"TF"的条目 // 加isset判断是为了避免部分条目缺失status字段导致报错 $filteredItems = array_filter($contentJson['data'], function($item) { return isset($item['status']) && $item['status'] === 'TF'; }); // 获取过滤后的条目数量 $filteredCount = count($filteredItems); // 后续可以用$filteredItems来渲染表格,比如: echo "<table border='1'>"; echo "<tr><th>ID</th><th>Weather</th><th>Status</th></tr>"; foreach ($filteredItems as $item) { echo "<tr>"; echo "<td>" . htmlspecialchars($item['id']) . "</td>"; echo "<td>" . htmlspecialchars($item['weather'] ?? 'NULL') . "</td>"; echo "<td>" . htmlspecialchars($item['status']) . "</td>"; echo "</tr>"; } echo "</table>"; // 输出过滤后的数量 echo "<p>过滤后共" . $filteredCount . "条数据</p>"; ?>
关键说明:
- JSON语法修正:你的原JSON文件里每个对象末尾有多余的尾逗号(比如
"status": "TT", },),这不符合标准JSON语法,会导致json_decode失败,需要先去掉这些多余的逗号,确保JSON格式正确。 - 关联数组解码:
json_decode第二个参数传true,会把JSON对象转成PHP关联数组,比操作对象更直观灵活。 - 安全过滤:用
array_filter配合匿名函数实现过滤,加isset($item['status'])是为了兼容可能缺失status字段的条目,避免报错。 - 数量统计:直接用
count()获取过滤后数组的长度即可。 - HTML渲染安全:用
htmlspecialchars()转义输出内容,避免XSS风险。
内容的提问来源于stack exchange,提问作者aynaz
相关产品推荐
相关产品推荐

