home1.gif


需求 有类似下面一个 .json 文件,希望将 .json 文件转换成 excel 文件

test.json

[ { “id”: 1, “name”: “对象(obj)”, “comments”: [“aa”, “bb”, “cc”] }, { “id”: 4, “name”: “结构化(sds)”,

  1. "comments": ["aa", "dd", "cc", "ii"]

},

  1. ...
  2. ...

{

  1. "id": 495,
  2. "name": "序列",
  3. "comments": ["aa"]

}

]

#

1. 分析/思路


后续补充。。。

2. 脚本


【脚本 j2e_v1.0.py】json文件内容规律,字段都一样

  1. import json
  2. import openpyxl
  3. # 读取 .json 文件
  4. def read_json(file):
  5. with open(file, 'r', encoding='utf8') as fr:
  6. json_data = json.load(fr)
  7. return json_data
  8. # 将数据写入 excel 文件
  9. def write_to_excel(file):
  10. j_data = read_json(file)
  11. j_data_length = len(j_data)
  12. # 创建 excel 文件并获取默认的 sheet 表
  13. wb = openpyxl.Workbook()
  14. ws = wb.active
  15. # 创建 excel 表头
  16. table_title_field = list(j_data[0].keys())
  17. for col in range(len(table_title_field)):
  18. last_col = col + 1
  19. ws.cell(row=1, column=last_col).value = table_title_field[col]
  20. # 写入基本数据
  21. for i in range(j_data_length):
  22. each_line = j_data[i]
  23. each_line_field = list(each_line.keys())
  24. for j in range(len(each_line_field)):
  25. ws.cell(row=i + 2, column=j + 1).value = str(each_line[each_line_field[j]]) # 从第二行开始写入数据
  26. wb.save('je_v1.0.xlsx')
  27. if __name__ == '__main__':
  28. write_to_excel('./test.json')

【脚本 j2e_v2.0.py】json文件内容不是很规律,如有的对象中某个字段没有

  1. import json
  2. import openpyxl
  3. # 读取 .json 文件
  4. def read_json(file):
  5. with open(file, 'r', encoding='utf8') as fr:
  6. json_data = json.load(fr)
  7. return json_data
  8. # 将数据写入 excel 文件
  9. def write_to_excel(file):
  10. j_data = read_json(file)
  11. j_data_length = len(j_data)
  12. # 创建 excel 文件并确定 sheet 表
  13. wb = openpyxl.Workbook()
  14. ws = wb.active
  15. # sheet_je = openpyxl.workbook().create_sheet('je') # 创建 excel 文件并在默认的 sheet 表后追加一个sheet表‘je’,在默认表前建sheet:openpyxl.workbook().create_sheet('je', 0)
  16. # 创建表头
  17. table_title_field = list(j_data[0].keys())
  18. last_col = 0
  19. for col in range(len(table_title_field)):
  20. last_col = col + 1
  21. ws.cell(row=1, column=last_col).value = table_title_field[col]
  22. # 写入基本数据
  23. for i in range(j_data_length):
  24. each_line = j_data[i]
  25. each_line_field = list(each_line.keys())
  26. # 将每个对象的数据按对应的字段在每一行中填写
  27. j = 0
  28. while j < len(each_line_field):
  29. # 判断每个对象字段是否有对应的列
  30. if each_line_field[j] not in table_title_field:
  31. table_title_field.append(each_line_field[j])
  32. last_col += 1
  33. ws.cell(row=1, column=last_col).value = each_line_field[j]
  34. # 将对象的字段值写进对应列的单元格中
  35. column_f = table_title_field.index(each_line_field[j]) + 1
  36. ws.cell(row=i+2, column=column_f).value = str(each_line[each_line_field[j]])
  37. j += 1
  38. wb.save('je_v2.0.xlsx')
  39. if __name__ == '__main__':
  40. write_to_excel('./test.json')

2. 扩展


上面,将 json 文件转换成 excel 文件,使用的第三方库包括 json、openpyxl。先记录一些它们基本的用法。

1. json 库

2. openpyxl 库

3. 参考


  • 参考文章
  1. https://www.cnblogs.com/BlueSkyyj/p/7571787.html
  • 在线转换工具
  1. JSON to CSV Converter (强烈推荐收藏)
  2. JSON 转换 Excel

end1.gif