You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现CSV转多层级JSON 重复人员数据自动嵌套合并

CSV转指定嵌套JSON实现方案

核心解决重复人员条目合并、嵌套数组追加的问题,整体逻辑不需要复杂操作,靠唯一键映射即可实现。

核心逻辑

不要逐行解析后直接往结果列表塞数据,先以人员唯一标识id为key建立临时映射字典:

  • 遍历每一行CSV数据时,先判断当前id是否存在于映射字典中
  • 若不存在:初始化符合目标结构的人员对象,固定字段(id、firstName、lastName)直接赋值,address和ext初始化为空数组,存入映射字典
  • 无论人员是否已存在,都将当前行的address、ext信息追加到对应人员的两个嵌套数组中
  • 所有行处理完成后,将映射字典的所有值提取为列表,就是最终符合要求的JSON结构

Python实现代码

import csv
import json

person_map = {}

# 读取|分隔的CSV文件
with open('ps.csv', 'r', encoding='utf-8') as csv_file:
    reader = csv.DictReader(csv_file, delimiter='|')
    for row in reader:
        current_id = row['id']
        # 新人员初始化结构
        if current_id not in person_map:
            person_map[current_id] = {
                "id": current_id,
                "firstName": row['firstName'],
                "lastName": row['lastName'],
                "address": [],
                "ext": []
            }
        # 追加当前行的地址和扩展信息
        person_map[current_id]['address'].append({"address": row['address']})
        person_map[current_id]['ext'].append({
            "extId": row['extId'],
            "extName": row['extName']
        })

# 转换为结果列表,输出格式化JSON
final_result = list(person_map.values())
with open('output.json', 'w', encoding='utf-8') as json_file:
    json.dump(final_result, json_file, ensure_ascii=False, indent=4)

注意事项

  • 用哈希映射存储已处理人员的方式,查找时间复杂度为O(1),数据量较大时性能远高于每次遍历结果列表匹配id
  • 所有行的address、ext字段统一走追加逻辑,不要在初始化分支单独写入第一行数据,能减少冗余判断,降低出bug概率
  • 如果业务要求同一个人员下不能出现重复地址、重复ext条目,追加前先判断对应值是否已存在于目标数组即可,不需要调整整体逻辑

内容的提问来源于stack exchange,提问作者Kapilraj Parameswararajah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 13:06:24