JSON 的核心概念与基础语法
| Python 里的结构 | JSON 里的对应结构 | 解释 |
|---|
| 字典 {} | JSON 对象 {} | 用大括号包裹,里面是「键值对」,就像一本字典,你给一个「键」,就能找到对应的「值」 |
| 列表 [] | JSON 数组 [] | 用中括号包裹,里面是有序的「值列表」,就像一个购物清单,按顺序放了多个内容 |
| 字符串 “” | JSON 字符串 “” | 必须用双引号包裹,不能用单引号,这是 JSON 的硬性规则 |
| 数字 123/3.14 | JSON 数字 123/3.14 | 直接写,不用加引号 |
| 布尔值 True/False | JSON 布尔值 true/false | 全小写,不用加引号 |
| 空值 None | JSON 空值 null | 全小写,不用加引号 |
# -*- coding: utf-8 -*-""" @Created on : 2026/4/28 15:28 @creator : er_nao @File :Day_14.py @Description :json数据格式认识 """""" 核心知识点 1:JSON 的核心概念与基础语法 Python 里的结构 || JSON 里的对应结构 || 大白话解释 字典 {} || JSON 对象 {} || 用大括号包裹,里面是「键值对」,就像一本字典,你给一个「键」,就能找到对应的「值」 列表 [] || JSON 数组 [] || 用中括号包裹,里面是有序的「值列表」,就像一个购物清单,按顺序放了多个内容 字符串 "" || JSON 字符串 "" || 必须用双引号包裹,不能用单引号,这是 JSON 的硬性规则 数字 123/3.14 || JSON 数字 123/3.14 || 直接写,不用加引号 布尔值 True/False JSON 布尔值 true/false 全小写,不用加引号 空值 None JSON 空值 null 全小写,不用加引号 """""" 核心知识点 2:Python 里 JSON 的 2 个核心操作(读取、写入,必学) """""" 核心操作 1:把 Python 数据转换成 JSON 字符串(序列化,json.dumps ()) 基础语法(必背) # 把Python数据转换成JSON字符串 json_str = json.dumps( python_data, # 你要转换的Python数据(字典、列表) ensure_ascii=False, # 必须加!解决中文乱码问题,国内用户必加 indent=4 # 可选,格式化JSON字符串,缩进4个空格,方便查看 ) """importjson# 1. 定义Python里的对话数据(字典、列表)chat_data=[{"对话ID":"chat_20241231_001","用户问题":"我想学习NLP的基础知识","AI回答":"NLP是人工智能的核心分支,主要研究人机语言交互"},{"对话ID":"chat_20241231_002","用户问题":"NLP需要学习哪些核心技能?","AI回答":"需要学习Python基础、文本清洗、分词、信息抽取、大模型API调用等"}]# 2. 把Python数据转换成JSON字符串(序列化)json_str=json.dumps(chat_data,ensure_ascii=False,indent=4)print(f'转换后的json字符串:{json_str}')""" 核心操作 2:把 JSON 字符串转换成 Python 数据(反序列化,json.loads ()) 基础语法(必背) # 把JSON字符串转换成Python数据 python_data = json.loads(json_str) # json_str是你要转换的JSON字符串 """# 1. 定义JSON字符串(比如大模型API返回的结果)json_str=""" [ { "对话ID": "chat_20241231_001", "用户问题": "我想学习NLP的基础知识", "AI回答": "NLP是人工智能的核心分支,主要研究人机语言交互" }, { "对话ID": "chat_20241231_002", "用户问题": "NLP需要学习哪些核心技能?", "AI回答": "需要学习Python基础、文本清洗、分词、信息抽取、大模型API调用等" } ] """# 2. 把JSON字符串转换成Python数据(反序列化)chat_data=json.loads(json_str)# 3. 打印转换后的Python数据,以及数据类型print("【转换后的Python数据类型】:",type(chat_data))print("【转换后的Python数据】:")fordatainchat_data:print(f'对话ID:{data['对话ID']}')print(f"用户问题:{data['用户问题']}")print(f"AI回答:{data['AI回答']}")""" 核心知识点 3:JSON 文件的读取与写入 """""" 核心操作 1:把 JSON 数据写入文件(json.dump ()) 基础语法(必背,和你之前学的 txt 文件读写完全对应) 把Python数据写入JSON文件 with open('文件名.json', 'w', encoding='utf-8') as file: json.dump( python_data, # 你要写入的Python数据(字典、列表) file, # 打开的文件对象 ensure_ascii=False, # 必须加!解决中文乱码 indent=4 # 可选,格式化文件里的JSON内容,方便查看 ) """# 1. 定义Python里的对话历史数据chat_history=[{"对话ID":"chat_20241231_001","用户ID":"user_001","用户问题":"我想学习NLP的基础知识","AI回答":"NLP是人工智能的核心分支,主要研究人机语言交互,核心技术包括分词、文本清洗、信息抽取等","对话时间":"2024-12-31 10:00:00","是否完成":True},{"对话ID":"chat_20241231_002","用户ID":"user_001","用户问题":"NLP需要学习哪些核心技能?","AI回答":"需要学习Python基础、文本清洗、分词、信息抽取、大模型API调用、RAG知识库搭建等","对话时间":"2024-12-31 10:05:00","是否完成":True}]# 2. 把对话历史写入JSON文件withopen("C:\\Users\\hp\\Desktop\\chat_history.json","w",encoding='utf-8')asfile:json.dump(chat_history,file,ensure_ascii=False,indent=4)# 3. 打印成功提示print("【写入成功】:对话历史已经写入json文件中")""" 核心操作 2:从 JSON 文件里读取数据(json.load ()) 基础语法(必背) # 从JSON文件里读取数据,转换成Python数据 with open('文件名.json', 'r', encoding='utf-8') as file: python_data = json.load(file) """# 实战代码# 1. 从JSON文件里读取对话历史数据withopen("C:\\Users\\hp\\Desktop\\chat_history.json","r",encoding='utf-8')asfile:chat_history=json.load(file)# 2. 打印读取到的数据信息print(f"【读取成功】:共读取到{len(chat_history)}轮对话")print("="*80)# 3. 遍历对话历史,做统计分析total_questions=len(chat_history)complated_chats=0forchatinchat_history:print(f"对话ID:{chat['对话ID']}")print(f"对话时间:{chat['对话时间']}")print(f"用户问题:{chat['用户问题']}")print(f"AI回答:{chat['AI回答'][:50]}...")print("="*50)ifchat['是否完成']:complated_chats+=1# 4. 打印统计结果print("【对话结果统计】")print(f"总对话轮数:{total_questions}")print(f"已完成对话数:{complated_chats}")print(f"完成率:{round(complated_chats/total_questions*100,2)}%")""" 核心知识点 4:JSON 在 NLP 大模型场景的 4 大核心实战 """""" 实战 1:大模型 API 请求与返回结果的 JSON 处理(核心中的核心) """# 1. 定义大模型API的请求参数(JSON格式)api_request={"model":"ep-20240520182611-2jvzk","messages":[{"role":"system","content":"你是一个专业的NLP学习助手,只回答和NLP相关的问题,不要说无关的话"},{"role":"user","content":"我想学习NLP自然语言处理的基础知识,应该从哪里开始?"}],"temperature":0.3,"max_tokens":500}# 2. 把请求参数转换成JSON字符串,发给大模型APIrequest_json=json.dumps(api_request,ensure_ascii=False,indent=4)print("大模型API请求JSON:")print(request_json)# 3. 模拟大模型API返回的JSON结果api_response_json=""" { "id": "chatcmpl-20241231-001", "object": "chat.completion", "created": 1735689600, "model": "ep-20240520182611-2jvzk", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "学习NLP自然语言处理,建议从以下几个步骤开始:1. 先掌握Python基础语法,这是NLP开发的核心工具;2. 学习文本预处理,包括文本清洗、分词、停用词过滤等基础操作;3. 学习核心的NLP任务,包括关键词提取、信息抽取、文本分类等;4. 学习大模型API调用,掌握大模型的提示词工程、对话管理等;5. 学习RAG检索增强生成技术,搭建自己的知识库问答系统。" }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 50, "completion_tokens": 150, "total_tokens": 200 } } """# 4. 把大模型返回的JSON结果,转换成Python数据,提取AI回答api_response=json.loads(api_response_json)ai_answer=api_response['choices'][0]['message']['content']totle_tokens=api_response['usage']['total_tokens']print("\n【大模型返回的AI回答】:")print(ai_answer)print(f"\n【本次对话总消耗Token】:{totle_tokens}")""" 实战 2:RAG 知识库文档元数据的 JSON 存储 """# 1. 定义RAG文档的元数据rag_document={"文档ID":"doc_20241231_001","文档标题":"NLP自然语言处理入门教程","文档作者":"AI老师","文档路径":"/documents/nlp_intro.pdf","文档类型":"pdf","文档大小":1024000,"上传时间":"2024-12-31","文档内容":{"章节1":{"章节标题":"NLP基础概念","章节内容":"NLP自然语言处理是人工智能的核心分支,主要研究人机之间的语言交互","章节字数":1200},"章节2":{"章节标题":"文本预处理","章节内容":"文本预处理是NLP的第一步,包括文本清洗、分词、停用词过滤等","章节字数":1500}},"文档关键词":["NLP","自然语言处理","大模型","RAG","Python","文本预处理"],"文档向量":[0.123,0.456,0.789,0.321,0.654],"是否公开":True,"阅读量":1000,"收藏量":500}# 2. 把RAG文档元数据写入JSON文件withopen("C:\\Users\\hp\\Desktop\\rag_document.json","w",encoding="utf-8")asfile:json.dump(rag_document,file,ensure_ascii=False,indent=4)print("【写入成功】:RAG文档数据源已经写入到rag_document.json文件中了")""" 实战 3:NLP 文本分析结果的 JSON 存储与导出 """importjiebaimportjieba.analyse# 1. 定义要分析的文本text=""" 自然语言处理(NLP)是人工智能的核心分支,主要研究人机之间的语言交互。 随着大模型技术的发展,NLP的应用场景越来越广泛,包括智能客服、AI写作、代码生成、知识库问答等。 学习NLP需要掌握Python基础、文本处理、大模型API调用、RAG知识库搭建等核心技能。 """text=text.strip()text=text.replace(' ','')# 2. 作文本分词# 分词words=jieba.lcut(text)# 关键词提取key_words=jieba.analyse.extract_tags(text,topK=5,withWeight=True)# 文本统计total_chars=len(text)total_words=len(words)# 3. 把分析结果整理成JSON格式analysis_result={"原始文本":text.strip(),"文本统计":{"总字符数":total_chars,"总分词数":total_words},"分词结果":words,"核心关键词Top5":[{"关键词":key_word,"权重":round(weight,4)}forkey_word,weightinkey_words],"分析时间":"2026-04-29 13:51:39"}# 4.将分析结果写入JSON文件withopen("C:\\Users\\hp\\Desktop\\text_analysis_result.json","w",encoding="utf-8")asfile:json.dump(analysis_result,file,ensure_ascii=False,indent=4)print("【分析完成】:文本分析结果已经写入到 text_analysis_result.json 文件里了!")print("\n【核心分析结果】:")print(f"总字符数:{total_chars}")print(f"总分词数:{total_words}")print("核心关键词Top5:")forkeyword,weightinkey_words:print(f"-{keyword}(权重:{round(weight,4)})")""" 实战 4:批量对话数据的 JSON 批量处理 """importos# 1. 定义json文件所在的文件夹路径json_file="C:\\Users\\hp\\Desktop\\json_file"# 2. 遍历文件夹里的所有json文件all_chat_data=[]forfilenameinos.listdir(json_file):# 只处理.json结尾的文件iffilename.endswith(".json"):file_path=os.path.join(json_file,filename)# 读取JSON文件withopen(file_path,"r",encoding="utf-8")asfile:chat_data=json.load(file)all_chat_data.extend(chat_data)# 3. 批量统计分析total_chats=len(all_chat_data)complated_chats=0user_questions=[]forchatinall_chat_data:user_questions.append(chat['用户问题'])ifchat['是否完成']:complated_chats+=1# 4. 把批量统计结果写入JSON文件batch_analysis_result={"总对话文件数":len(os.listdir(json_file)),"总对话轮数":total_chats,"已完成对话数":complated_chats,"对话完成率":round(complated_chats/total_chats*100,2)iftotal_chars>0else0,"所有用户问题":user_questions,"分析时间":"2026-04-29 15:27:24"}withopen("C:\\Users\\hp\\Desktop\\batch_analysis_result.json","w",encoding="utf-8")asfile:json.dump(batch_analysis_result,file,ensure_ascii=False,indent=4)print(f"【批量分析完成】:共处理了{len(os.listdir(json_file))}个JSON文件,{total_chats}轮对话")print(f"对话完成率:{round(complated_chats/total_chats*100,2)}%")print("批量分析结果已经写入到 batch_chat_analysis.json 文件里了!")
![]()