python之json格式解析与转换方式

 更新时间:2024年09月10日 08:52:41   作者:煮雨小筑  
使用Python的内置json库可以实现JSON和Python对象的互相转换,有效的JSON格式字符串是指使用双引号、键唯一且没有尾随逗号的字符串,json.loads()用于将JSON字符串转换为Python对象,json.dumps()则将Python对象转化为JSON字符串

python json格式解析与转换 

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

但注意,只有有效的json格式字符串才能够转换为Python对象。

OK,问题来了,什么叫有效的json格式字符串?

  • 字符串必须用双引号
  • 在同一个对象中,所有的键必须是唯一的
  • 最后一个元素后面不应有逗号
  • 字符串中不应包含注释

1、json格式字符串转python类型

主要用到两个函数:

  • 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相关方法进行数据的提取等操作

  • json.load()
  • load用于从一个文件中读取json数据,接收一个文件对象,返回一个python对象

如读取txt文件中存储的字符串形式的json数据,如下图

import json

# open函数返回一个文件对象,并将其赋给f
with open(r'test_json.txt', 'r') as f:
    json_content = json.load(f)
    print(json_content)
    print(type(json_content))

2、python对象转为json格式字符串

主要用到两个函数:

  • json.dumps
  • dumps为'dump string'的缩写,用于将python对象转为json格式的字符串
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)}')

  • 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)

3、json转DataFrame

直接使用pd.read_json函数读取json格式字符串、json文件,然后转为DataFrame

import pandas as pd
from io import StringIO
 
# 读取JSON数据为DataFrame对象
json_data = '{"name": ["Alice", "Bob"], "age": [25, 30]}'
# read_json 函数通常期望接收一个文件路径或文件对象,而不是字符串,
# 所以这里使用了StringIO 来将字符串json_data 转换成一个类似文件的对象,这样read_json 就可以从中读取数据
df = pd.read_json(StringIO(json_data))
df

或直接读取json文件

import pandas as pd

data = pd.read_json(r'test_json.json')
data

4、DataFrame转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.to_json('test_to_json.json', indent=4)
# data.to_json('test_to_json.json', indent=4, date_unit='s') date_unit='s'可将时间戳转换为以秒为单位的时间戳

部分输出结果如下,

同时可以使用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 的一行。

同时注意到,时间格式在转为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')

部分输出结果为,

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 利用Python绘画双摆操作分享

    利用Python绘画双摆操作分享

    这篇文章主要介绍了利用Python画双摆,绘画双摆的过程主要包括以下步骤,双摆问题、运动过程及公式推导过程,下文详细介绍,需要的小伙伴可以参考一下
    2022-04-04
  • 使用Python进行物联网设备的控制与数据收集

    使用Python进行物联网设备的控制与数据收集

    Python作为一种高效且易于学习的编程语言,已经成为开发物联网应用的首选语言之一,本文将探讨如何使用Python进行物联网设备的控制与数据收集,并提供相应的代码示例,需要的朋友可以参考下
    2024-05-05
  • 使用pandas 将DataFrame转化成dict

    使用pandas 将DataFrame转化成dict

    今天小编就为大家分享一篇使用pandas 将DataFrame转化成dict,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python OpenCV图像的位运算操作

    Python OpenCV图像的位运算操作

    位运算是计算机科学中一种基础而高效的操作,它直接对二进制位进行处理,在图像处理中,位运算也是一种重要的技术,尤其在图像的合成、分离、掩模处理等场景中,常常用到位运算,本文将介绍图像处理中的常见位运算操作,需要的朋友可以参考下
    2024-12-12
  • Python django框架 web端视频加密的实例详解

    Python django框架 web端视频加密的实例详解

    这篇文章主要介绍了Python django框架 web端视频加密,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • python 星号(*)的多种用途

    python 星号(*)的多种用途

    这篇文章主要介绍了python 星号(*)的多种用途,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-09-09
  • 详细介绍python类及类的用法

    详细介绍python类及类的用法

    前面我们介绍了类的创建及面向对象的三大特性.本篇将详细介绍Python 类的成员,成员修饰符,类的特殊成员.需要的朋友可以参考下
    2021-05-05
  • 如何解决Python:报错[Errno 2]No such file or directory问题

    如何解决Python:报错[Errno 2]No such file or&nb

    介绍了Python文件读取操作时常见的错误原因及解决方法,主要错误原因包括路径拼写错误、工作目录与相对路径不匹配以及文件不存在,解决方法有使用绝对路径和动态获取脚本路径,其他注意事项包括验证文件路径与名称、理解工作目录与相对路径
    2025-02-02
  • python中强制关闭线程与协程与进程方法

    python中强制关闭线程与协程与进程方法

    python使用中多线程、多进程、多协程使用是比较常见的。那么如果在多线程等的使用,我们这个时候我们想从外部强制杀掉该线程请问如何操作?这篇文章带你介绍,感兴趣的同学可以参考阅读
    2023-03-03
  • PyQt5每天必学之弹出消息框

    PyQt5每天必学之弹出消息框

    这篇文章主要为大家详细介绍了PyQt5每天必学之弹出消息框,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04

最新评论