处理json格式的数据
如何处理json格式的数据
1. 主要处理三类数据
- 带有json格式的数据
- 形式:[{key:value}]
- 提取:文字、图片链接、文档链接
[{"content":"点击“产品开发库”,右上角“展开筛选”,按条件筛选流程信息。","type":"text"},{"content":"\n","type":"text"},{"height":0,"key":"img_v3_02cu_1899636b-dfc3-43df-97fe-80ccc774c32g","src":"图片链接","type":"img","width":1313},{"content":"\n","type":"text"},{"content":"\n","type":"text"}]
- 纯字符串
- 第一种需要提取出来“”之间的内容
- 第二种需要提取单行的内容
数据一:
"1、查看当前审批人:可在正式数据发放/过程数据发放中,当前审批人员列中查看当前审批人。如已审批完则不显示审批人。
2、单据状态:在状态列,第1个小图标表示单据的流程状态(鼠标悬停可显示),第2个小图标表示数据状态(鼠标悬停可显示)"
数据二:
计划完成时间前提交任务就不算超期
代码:
import re
import json
import pandas as pd
# 示例输入文件路径
input_file_path = 'C:\\Users\\user\\Desktop\\test.txt'
# 处理多行“”中的内容,并把他们合并为一个内容+单行纯文本
def parse_notebook_file(input_file):
datalist = []
with open(input_file, 'r', encoding='utf-8') as f:
for line in f:
try:
# 尝试将行解析为JSON
datalist.append(json.loads(line))
except json.JSONDecodeError:
final_text = ""
if line.startswith('"'):
final_text+=line[1:] #去除第一行的单引号
# print(line[1:])
# 如果当前行以双引号开始,尝试找到以双引号结束的行
for next_line in f:
if len(re.findall(r'"', next_line))%2!=1 : #判断“个数是否奇数
final_text += next_line
# print(final_text)
else:
final_text += next_line[:len(next_line)-2] #去除最后一行的单引号
# print(final_text)
datalist.append(final_text)
# print(datalist)
break
# break
# 如果找到以双引号结束的行,将这两行之间的内容作为一个文本条目添加到列表中
else:
# 如果解析失败,则将行作为纯文本添加
datalist.append(line.strip())
# for data in datalist:
# print(data)
# print('---------')
return datalist
# 处理输入文件并生成datalist
datalist = parse_notebook_file(input_file_path)
# 提取json字符串中的中文、图片链接、文档链接
def collect_pure_text_and_links(datalist):
results = []
for data in datalist:
# print(data)
# print('----------------------')
if isinstance(data, list): # 检查是否为列表(JSON格式-列表中嵌套字典)
# print(data)
content_parts = []
for item in data:
# print(item)
if item["type"] == "text":
# 提取中文
chinese_text = re.findall(r'[\u4e00-\u9fa5]+', item["content"])
# 提取链接
links = re.findall(r'https?://[^\s]+', item["content"])
# 合并中文和链接
combined_content = ' '.join(chinese_text + links)
if combined_content:
# print(item["content"].replace(combined_content, combined_content.replace(',', ',')))
content_parts.append(item["content"].replace(combined_content, combined_content.replace(',', ',')))
elif item["type"] == "img":
# 添加图片链接
# print(item["src"])
content_parts.append(item["src"])
elif item["type"] == "hyperlink":
# 提取链接和文本
content_parts.append(item["text"])
# print(item["text"])
content_parts.append(item["url"])
# print(item["url"])
results.append(' '.join(content_parts))
# print('----------------------')
else:
results.append(data)
# print('----------------------')
for data_r in results:
print(data_r)
print('----------------------')
return results
# 使用新函数处理并收集数据
collected_data = collect_pure_text_and_links(datalist)
# 将收集的数据存储到Excel文件中
output_file_path = 'C:\\Users\\user\\Desktop\\test_output.xlsx' #输出路径,运行程序时,该文件不要打开
df = pd.DataFrame(collected_data, columns=['Content'])
df.to_excel(output_file_path, index=False)
output_file_path