开发者

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

开发者 https://www.devze.com 2024-09-10 09:31 出处:网络 作者: 煮雨小筑
目录python json格式解析与转换 1、json格式字符串转python类型2、python对象转为json格式字符串3、json转DataFrame4、DataFrame转json总结python json格式解析与转换 
目录
  • python json格式解析与转换 
    • 1、json格式字符串转python类型
    • 2、python对象转为json格式字符串
    • 3、json转DataFrame
    • 4、DataFrame转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)}; p编程arse_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格式解析与转换方式

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

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

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

    import json
    
    # open函数返回一个文件对象,并将其赋给f
    with open(r'test_json.txt', 'r') as f:
        json_content = json.load(f)
        prinhXmykWrt(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的类型为: {thXmykWrype(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格式解析与转换方式

    • 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格式解析与转换方式

    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'可将时间戳转换为以秒为单位的时间戳

    部分输出结果如下,

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

    同时可以使用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格式解析与转换方式

    同时注意到,时间格式在转为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之json格式解析与转换方式

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号