Python标准库实现json格式字符串与对象的互转

2024-08-0909:26:13编程语言入门到精通Comments1,006 views字数 2833阅读模式

使用Python标准库: json 实现json格式字符串与Python对象的互转。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/64893.html

但注意,只有有效的json格式字符串才能够转换为Python对象。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/64893.html

OK,问题来了,什么叫有效的json格式字符串?
  • 字符串必须用双引号
  • 在同一个对象中,所有的键必须是唯一的
  • 最后一个元素后面不应有逗号
  • 字符串中不应包含注释
1、json格式字符串转python类型
主要用到两个函数:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/64893.html
  • json.loads()
    • loads为'load string'的缩写,用来解析json格式的字符串(该字符串要包含有效的json数据),返回python对象(列表或字典)
import json
# json格式的字符串  可解析为python列表json_data_list = '[{"name": ["Alice", "Bob"], "age": [25, 30]}]'# json格式的字符串  可解析为python字典json_data_dict = '{"name": ["Alice", "Bob"], "age": [25, 30]}'
# 解析json格式的字符串parse_json_data_list = json.loads(json_data_list)parse_json_data_dict = json.loads(json_data_dict)
print(f'json_data_list的类型为: {type(json_data_list)}; parse_json_data_list的类型为: {type(parse_json_data_list)}')print(f'json_data_dict的类型为: {type(json_data_dict)}; parse_json_data_dict的类型为: {type(parse_json_data_dict)}')
# 转为python类型之后,比如转为python字典,我们就可以使用dict相关方法进行数据的提取等操作

Python标准库实现json格式字符串与对象的互转文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/64893.html

  • json.load()
    • load用于从一个文件中读取json数据,接收一个文件对象,返回一个python对象
如读取txt文件中存储的字符串形式的json数据,如下图文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/64893.html

Python标准库实现json格式字符串与对象的互转文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/64893.html

import json
# open函数返回一个文件对象,并将其赋给fwith open(r'test_json.txt', 'r') as f:    json_content = json.load(f)    print(json_content)    print(type(json_content))
2、python对象转为json格式字符串文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/64893.html

主要用到两个函数:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/64893.html

  • json.dumps
    • dumps为'dump string'的缩写,用于将python对象转为json格式的字符串文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/64893.html
import json
# python对象data_list = [1, 2, 3]data_dict = {"name": ["Alice", "Bob"], "age": [25, 30]}
# 转为json对象json_data_list = json.dumps(data_list)json_data_dict = json.dumps(data_dict)
print(f'data_list的类型为: {type(data_list)}; json_data_list的类型为: {type(json_data_list)}')print(f'data_dict的类型为: {type(data_dict)}; json_data_dict的类型为: {type(json_data_dict)}')

Python标准库实现json格式字符串与对象的互转文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/64893.html

  • json.dump
    • dump用于将 python 对象转换为json格式,并将结果写入文件,它需要一个文件对象作为输出目标
import json
data_dict = {"name": ["Alice", "Bob"], "age": [25, 30]}
# 创建一个test_json.json文件(w: 文件不存在则创建)with open(r'test_json.json', 'w') as f:    # indent: 该参数用来控制缩进 用来美化json使其有清晰的层次结构    json.dump(data_dict, f, indent=4)

Python标准库实现json格式字符串与对象的互转文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/64893.html

3、json转DataFrame文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/64893.html
直接使用pd.read_json函数读取json格式字符串、json文件,然后转为DataFrame
import pandas as pdfrom io import StringIO
# 读取JSON数据为DataFrame对象json_data = '{"name": ["Alice", "Bob"], "age": [25, 30]}'df = pd.read_json(StringIO(json_data))df
import pandas as pd
# 直接读取json文件data = pd.read_json(r'test_json.json')data
4、DataFrame转json文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/64893.html
import pandas as pd
data = pd.DataFrame(    {        'value': range(10),        'time': pd.date_range('2024-01-01', freq='D', periods=10),        'flag': list('abcdefghij')    })
data.to_json('test_to_json.json', indent=4)
部分输出结果如下,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/64893.html

Python标准库实现json格式字符串与对象的互转文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/64893.html

同时可以使用orient(其参数可以取:split、records、index、columns、values、table)参数改变输出数据结构,大家可以尝试一下各个参数取值出来的效果,下面展示orient='records'的输出效果。
import pandas as pd
data = pd.DataFrame(    {        'value': range(10),        'time': pd.date_range('2024-01-01', freq='D', periods=10),        'flag': list('abcdefghij')    })
data.to_json('test_to_json.json', indent=4, orient='records')
部分输出结果如下,输出是一个json对象数组,其中每个对象对应 DataFrame 的一行。

Python标准库实现json格式字符串与对象的互转文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/64893.html

同时注意到,时间格式在转为json之后,变成了时间戳,怎么保留原来的时间格式呢
那就需要在转为json之前,先把时间格式转为字符串格式,再转为json
import pandas as pd
data = pd.DataFrame(    {        'value': range(10),        'time': pd.date_range('2024-01-01', freq='D', periods=10),        'flag': list('abcdefghij')    })
data['time'] = data['time'].astype(str)
data.to_json('test_to_json.json', indent=4, orient='records')
部分输出结果为,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/64893.html

Python标准库实现json格式字符串与对象的互转文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/64893.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/64893.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/64893.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定