如何用JQ或PHP转置JSON数据集并生成指定HTML表格?
JSON转指定HTML表格的实现方案
一、Linux CLI工具(JQ)实现
直接使用JQ命令即可完成转换,以下是完整命令及说明:
执行命令
jq -r ' . as $raw | ($raw[] | .date) | unique | sort as $dates | ($raw[] | .uid) | unique as $users | "<table border=1>" , "<tr>" , " <td> NA" , ($dates | map(" <td> \(.)") | join("\n")) , "</tr>" , ($users[] | . as $user | "<tr>" , " <td> \( $user )" , ($dates[] | ($raw[] | select(.uid == $user and .date == .) | "\(.reg)/\(.ot)") // "-" | " <td> \(.)" ) | join("\n") , "</tr>" ) , "</table>" ' data.json
命令逻辑说明
- 将原始JSON数据存入
$raw变量,方便后续重复引用 - 提取所有日期字段,去重后排序得到表头的日期列
- 提取所有用户ID,去重得到用户列表
- 生成表格头部:包含"NA"列和所有排序后的日期列
- 遍历每个用户,针对每个日期查找对应记录:
- 找到记录则拼接
reg/ot字符串 - 无匹配记录则显示"-"
- 找到记录则拼接
- 生成完整的HTML表格结构
二、PHP实现逻辑及代码
如果无法使用JQ,可通过PHP代码实现,以下是步骤及示例:
实现步骤
- 读取解析JSON:读取JSON文件内容,转换为PHP关联数组
- 提取基础数据:收集所有唯一日期并排序,收集所有唯一用户ID
- 构建映射关系:创建用户-日期的二维数组,存储每个用户各日期的
reg/ot值 - 生成HTML表格:依次输出表头、每个用户的数据行,无数据的单元格填充"-"
示例代码
<?php // 读取JSON文件(替换为你的文件路径) $jsonData = file_get_contents('data.json'); $records = json_decode($jsonData, true); // 提取并处理日期 $dates = array_unique(array_column($records, 'date')); sort($dates); // 提取用户ID $users = array_unique(array_column($records, 'uid')); // 构建用户-日期数据映射 $userData = []; foreach ($records as $record) { $uid = $record['uid']; $date = $record['date']; $userData[$uid][$date] = "{$record['reg']}/{$record['ot']}"; } // 输出HTML表格 echo "<table border=1>\n"; // 表头 echo "<tr>\n"; echo " <td> NA\n"; foreach ($dates as $date) { echo " <td> {$date}\n"; } echo "</tr>\n"; // 用户数据行 foreach ($users as $user) { echo "<tr>\n"; echo " <td> {$user}\n"; foreach ($dates as $date) { $content = isset($userData[$user][$date]) ? $userData[$user][$date] : '-'; echo " <td> {$content}\n"; } echo "</tr>\n"; } echo "</table>\n"; ?>
内容的提问来源于stack exchange,提问作者AgentSmith0101
相关产品推荐
相关产品推荐

