首页 > Python3教程 > Python3 File(文件) 操作

Python3 JSON数据类型

本文主要介绍了python JSON数据类型及其与python对象之间的转换,欢迎大家的学习。

JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。基于 ECMAScript (w3c制定的js规范)的一个子集,

采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。

JSON易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

JSON是一个字符串,能被所有语言读取,很方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且能直接在Web页面中读取,非常方便。

JSON和Python内置数据类型对应关系

JSON类型 Python类型
{} dict
[] list
"string" str
1234.56 int或float
true/false True/False
null None

Python内置的json模块提供了非常完整的Python对象到JSON格式的转换

Python基本数据类型转JSON字符串

Python的dict对象能直接序列化为JSON的{}

dumps()方法返回一个标准的JSON字符串,dump()方法直接把JSON字符串写入一个file-like Object。

import json
a = dict(name='Python', nu=2, score=90)
s = json.dumps(a)
print(s)

Python对象转JSON字符串

JSON字符串转Python基本数据类型

loads()方法把JSON字符串转成python对象,load()方法从file-like Object中读取字符串转成python对象。

import json

json_str = '{"name": "Python", "nu": 2, "score": 90}'
a = json.loads(json_str)
print(a)

Python对象(class)转JSON字符串

class对象不能直接序列化为JSON对象,我们需要自定义一个序列化方法为dumps()方法调用

import json

class User(object):
def __init__(self, name, nu, language):
self.name = name
self.nu = nu
self.language = language

s = User('aa', 1, 'python')
print(json.dumps(s))

 这样会直接报错:TypeError: Object of type 'User' is not JSON serializable

TypeError: Object of type 'User' is not JSON serializable

自定义一个序列化方法为dumps()方法调用

dumps()方法的参数列表中第一个obj参数为必须的,dumps()方法还有一个可选参数default用于把任意一个对象变成一个可序列为JSON的对象

import json

# 对象转换为字典
def usertodict(user):
return {
'name': user.name,
'nu': user.nu,
'language': user.language
}

class User(object):
def __init__(self, name, nu, language):
self.name = name
self.nu = nu
self.language = language

s = User('aa', 1, 'python')
print(json.dumps(s, default=usertodict))

输出:{"name": "aa", "nu": 1, "language": "python"}

一般的class对象实例都有一个__dict__属性,是一个dict,用来存储对象的实例变量 

改写参数default=lambda obj: obj.__dict__

import json

class User(object):
def __init__(self, name, nu, language):
self.name = name
self.nu = nu
self.language = language

s = User('aa', 1, 'python')
print(json.dumps(s, default=lambda obj: obj.__dict__))

JSON字符串转换为class对象

import json

def dicttouser(user):
return User(user['name'],user['nu'],user['language'])

class User(object):
def __init__(self, name, nu, language):
self.name = name
self.nu = nu
self.language = language

s = '{"name": "aa", "nu": 1, "language": "python"}'
# 输出 <__main__.User object at 0x000002489122CD30>
print(json.loads(s, object_hook=dicttouser))

 

关闭
感谢您的支持,我会继续努力!
扫码打赏,建议金额1-10元


提醒:打赏金额将直接进入对方账号,无法退款,请您谨慎操作。