返回顶部
首页 > 资讯 > 后端开发 > Python >Python 操作json
  • 807
分享到

Python 操作json

操作Pythonjson 2023-01-31 00:01:38 807人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

JSON语法规则: 数据在名称/值对中 数据由逗号分隔 花括号保存对象 方括号保存数组 json字符串本质上是一个字符串,用单引号表示 Json数据的书写格式 名称--值对,包括名称字段(在双引号中),后面跟一个冒号,然后是值: “na

JSON语法规则:
数据在名称/值对中
数据由逗号分隔
花括号保存对象
方括号保存数组

json字符串本质上是一个字符串,用单引号表示

Json数据的书写格式
名称--值对,包括名称字段(在双引号中),后面跟一个冒号,然后是值:
“name”: ”zhangsan” 等价于name = “zhangsan”

Json值
值可以是
数字(整数或浮点数)
字符串(双引号括起来)
逻辑值(true或false)
数组(在方括号中)
对象(在花括号中)
null

Json对象
Json的对象是在大括号中的,
{“name”:”zhangsan”,”age”:20} 

等价 name=”zhangsan” age = 20

Json数组
Json数组是在中括号中的,数组可以包含多个对象
{
 "employees": [
 { "firstName":"John" , "lastName":"Doe" }, 
 { "firstName":"Anna" , "lastName":"Smith" }, 
 { "firstName":"Peter" , "lastName":"Jones" }
 ]
}
Employees是包含三个对象的数组

编码Json.dumps()
将一个python对象编码成json字符串,

Python的列表转换成json数组
>>> json.dumps([1,2,3,"a"])

'[1, 2, 3, "a"]'

Python的字符串转换成json字符串

>>> json.dumps("abc123")
'"abc123"'

Python元组转换成json数组

>>> json.dumps((1,2,3,"abc"))
'[1, 2, 3, "abc"]'

Python的字典转换成json的对象
>>> json.dumps({1:"a",2:"b",3:"c"})
'{"1": "a", "2": "b", "3": "c"}''#注意1、2、3被加上了双引号,因为json的名称是必须要加双引号的

Python的数字(int)转换成json的数字
>>> json.dumps(1235)
'1235'

Python的unicode字符串转换成json的字符串
>>> json.dumps(u"abcd")
'"abcd"'

Python的True转换成json的true
>>> json.dumps(True)
'true'

Python的False转换成json的false
>>> json.dumps(False)
'false'

Python的None转换成json的null
>>> json.dumps(None)
'null'

>>> type(json.dumps("[1,2,3]")) #json本质上是一个字符串

<class 'str'>
>>> type(json.dumps("abc"))
<class 'str'>

Python类型和json类型的对应关系

怎么判断一个json 是不是合法的?
用try except
try:
    json.loads('"abc"')
except Exception,e:
    print e
else:
print "ok"

json.dumps()函数参数应用
dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding='utf-8', default=None, sort_keys=False, **kw)
该方法返回编码后的一个json字符串
sort_keys
是否按key排序,sort_keys = True升序排序
>>> data = [{"a":"A",'d':4,"b":(2,4),"c":3.0}]

>>> print(json.dumps(data))

[{"a": "A", "d": 4, "b": [2, 4], "c": 3.0}]

>>> print(json.dumps(data,sort_keys=True))
[{"a": "A", "b": [2, 4], "c": 3.0, "d": 4}]

indent 
设置参数缩进显示的空格数。缩进显示使读起来更加清晰。
>>> import json
>>> data = [{"a": "A", "b": [2, 4], "c": 3.0}]
>>> print(json.dumps(data,sort_keys=True,indent=4))
[
    {
        "a": "A",
        "b": [
            2,
            4
        ],
        "c": 3.0
    }
]

Separators
参数的作用是去掉逗号“,”和分号“:”后面的空格,从上面的输出果都能看到“,”与“:”后面都有个空格,这都是为了美化输出结果的作用,但是在我们传输数据的过程中,越精简越好,冗余的东西全部去掉,因此就可以加上separators参数对传输的json串进行压缩。该参数是元组格式的

>>> import json
>>> data = [{"a": "A", "b": [2, 4], "c": 3.0}]
>>> print(len(json.dumps(data)))
35
>>> print(len(json.dumps(data,separators=(',',':'))))
29
skipkeys
在encoding过程中,dict对象的key只可以是基本数据类型(str,unicode,int,float,bool,None),如果是其他类型,那么在编码过程中就会抛出TypeError的异常。skipkeys可以跳过那些非string对象的key的处理,就是不处理

#coding=utf-8
import json
data = [{'a':'A','b':(2,4),'c':3.0,(1,2):'D tuple'}]
print(u"不设置skipkeys 参数")
try:
    res1 = json.dumps(data)
except Exception as e:
    print(e)

print(u"设置skipkeys 参数")
print(json.dumps(data,skipkeys=True))

json.loads()
将一个json字符串解码成python对象

解码json对象到python字典

>>> import json
>>> json.loads('{"a":1,"b":2}')#注意外面有单引号
{'a': 1, 'b': 2}

解码json数组到python的列表
>>> json.loads('["a","b",2]')
['a', 'b', 2]

解码json的字符串到python的字符串
>>> json.loads('"abc"')
'abc'

解码json的true\false到python的True,False

>>> json.loads('true')
True
>>> json.loads('false')
False

解码json的null到python的None
>>> print(json.loads('null'))
None

解码json的数字到python的int、float

>>> json.loads('123')
123
>>> json.loads('123.20')
123.2

>>> a  =[{1:12,'a':12.3},[1,2,3],(1,2),'abc',u"ab",12]
>>> print("编码后:\n",json.dumps(a))
编码后:
 [{"1": 12, "a": 12.3}, [1, 2, 3], [1, 2], "abc", "ab", 12]
>>> print("解码后: ",json.loads(json.dumps(a)))
解码后:  [{'1': 12, 'a': 12.3}, [1, 2, 3], [1, 2], 'abc', 'ab', 12]

注意:
json格式的字符串解码成Python对象以后,String类型都变成了str类型,数组变成了list,不会回到原来的元组类型,字典key的字符类型也被转成字符串类型

从json到python的类型转换

将类对象编码成json串
Python中的dict对象可以直接序列化为json的{},但是很多时候,可能用class表示对象,比如定义Employe类,然后直接去序列化就会报错。原因是类不是一个可以直接序列化的对象,但我们可以使用dumps()函数中的default参数来实现

#coding=utf-8
import json
class Employee(object):
    def __init__(self,name,age,sex,tel):
        self.name = name
        self.age = age
        self.sex = sex
        self.tel = tel

    #将序列化函数定义到类里面
    def obj_json(self,obj_instance):
        return {   #返回一个字典
            'name' : obj_instance.name,
            'age' : obj_instance.age,
            'sex' : obj_instance.sex,
            'tel' : obj_instance.tel}

emp =Employee("Lily",24,"female","18212345678")
print(json.dumps(emp,default = emp.obj_json))#编码成json对象

#coding=utf-8
import json
class Employee(object):
    def __init__(self,name,age,sex,tel):
        self.name = name
        self.age = age
        self.sex = sex
        self.tel = tel

    #将序列化函数定义到类里面
    def obj_json(self,obj_instance):
        return {
            'name' : obj_instance.name,
            'age' : obj_instance.age,
            'sex' : obj_instance.sex,
            'tel' : obj_instance.tel}

emp =Employee("Lily",24,"female","18212345678")
print(emp.__dict__)
print(json.dumps(emp,default=lambda Employee:Employee.__dict__))
print(json.dumps(emp,default = lambda emp:emp.__dict__))

Json反序列化为对象
json串反序列化成类对象或类的实例,使用的是loads()方法中的object_hook参数来实现

#coding=utf-8
import json
class Employee(object):
    def __init__(self,name,age,sex,tel):
        self.name = name
        self.age = age
        self.sex = sex
        self.tel = tel

#emp = Employee('Lily',24,'female','13112345678')

def jsonToClass(emp):
    return Employee(emp['name'],emp['age'],emp['sex'],emp['tel'])

json_str = '{"name":"Lucy","age":21,"sex":"female","tel":"13510163252"}'#需要反序列化的对象

e = json.loads(json_str,object_hook = jsonToClass)#通过loads反序列化得到对象e

print(e)
print(e.name)

--结束END--

本文标题: Python 操作json

本文链接: https://lsjlt.com/news/182792.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python 操作json
    Json语法规则: 数据在名称/值对中 数据由逗号分隔 花括号保存对象 方括号保存数组 Json字符串本质上是一个字符串,用单引号表示 Json数据的书写格式 名称--值对,包括名称字段(在双引号中),后面跟一个冒号,然后是值: “na...
    99+
    2023-01-31
    操作 Python json
  • python操作json(一)
    Python 操作jsonJson语法规则:数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组Json字符串本质上是一个字符串,用单引号表示 Json数据的书写格式名称--值对,包括名称字段(在双引号中),后面跟一个冒号,然后是值...
    99+
    2023-01-31
    操作 python json
  • python3操作json
    json本身就是一种字符串。 # 需要导入模块包 import json 1,将字符串转为json格式 s1 = "{'key1':'value1','key2':'value2'}" print(s1) print(type(s1)) ...
    99+
    2023-01-31
    操作 json
  • python 存储json数据的操作
    本篇我们将学习简单的json数据的存储 首先我们需要引入json模块: import json 这里我们模拟一个常见常见,我们让用户输入用户名、密码,在密码输入完成后提示用户再次输入密码来确认自己的输入,如果两...
    99+
    2022-06-02
    python 存储数据 存储json数据
  • python之json文件读写操作
    文章目录 python操作json的四种方法json.loadsjson.loadjson.dumpsjson.dump python操作json的四种方法 python操作js...
    99+
    2023-09-03
    python json
  • Python中json库的操作指南
    目录概念json操作json转换成字典:字典转成json串总结概念 json是一种通用的数据类型一般情况下接口返回的数据类型都是json长得像字典,形式也是k-v{ }其实json是...
    99+
    2023-05-14
    python中的json库 python读取json python json库
  • MySQL的JSON操作
    官网地址 1. MySQL json介绍 As of MySQL 5.7.8, MySQL supports a native JSON data type defined by RFC 7159 ...
    99+
    2023-09-04
    mysql json
  • 详细解读Python中的json操作
    目录1.什么是Json2.python数据类型与json数据类型的映射关系3. json中常用的方法3-1   json.dumps()3-2 json.load...
    99+
    2024-04-02
  • Python中的json操作实例分析
    本文小编为大家详细介绍“Python中的json操作实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python中的json操作实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.什么是JsonJS...
    99+
    2023-06-30
  • Python入门进阶教程-JSON操作
    什么是JSON?JSON 的全称是 JavaScript Object Notation,即 JavaScript 对象符号,它是一种轻量级、跨平台、跨语言的数据交换格式,其设计意图是把所有事情都用设计的字符串来表示,这样既方便在互联网上传...
    99+
    2023-06-02
  • Python读写JSON文件的操作详解
    目录JSONJSON 起源JSON 样例Python 原生支持 JSON序列化 JSON简单的序列化示例JSON 反序列化简单的反序列化示例应用案例编码和解码JSON JSON 起源...
    99+
    2024-04-02
  • python 包实现JSON 轻量数据操作
    目录一、将对象转为json字符串二、格式化输出三、将json字符串转为对象四、安装demjson五、将对象转为json字符串六、将json字符串转为对象一、将对象转为json字符串 ...
    99+
    2024-04-02
  • java中的JSON操作
    在Java中,可以使用许多库来操作JSON数据。以下是一些常用的JSON库:1. Jackson:Jackson是一个流行的JSON...
    99+
    2023-09-28
    Java
  • python对json的相关操作实例详解
    本文实例分析了python对json的相关操作。分享给大家供大家参考,具体如下: 什么是json: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和...
    99+
    2022-06-04
    详解 实例 操作
  • 深入理解python对json的操作总结
    Json简介:Json,全名 JavaScript Object Notation,是一种轻量级的数据交换格式。Json最广泛的应用是作为AJAX中web服务器和客户端的通讯的数据格式。现在也常用于http...
    99+
    2022-06-04
    操作 python json
  • Python操作JSON实现网络数据交换
    目录前言JSON是什么?JSON与XML的优劣差异?将Python对象编码成JSON字符串将JSON字符串解码为Python对象解决中文乱码问题前言 学学Python中操纵JSON的...
    99+
    2024-04-02
  • Python Json读写操作之JsonPath怎么使用
    Python Json读写操作_JsonPath用法详解1. 介绍JSONPath是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括Javascript、Python、PHP和Java。JSONPath的安...
    99+
    2023-05-14
    Python JSON jsonpath
  • Python操作JSON文件的知识点整理
    目录json 模块读取 JSON写入 JSON读取与写入基本用法如下json 模块进阶用法控制输出格式在 JSON 中存储 Python 特殊类型对数据进行验证和清洗第三方模块jso...
    99+
    2023-01-28
    Python操作JSON知识点 Python操作JSON Python JSON
  • Python中json库的操作方法有哪些
    这篇文章主要介绍“Python中json库的操作方法有哪些”,在日常操作中,相信很多人在Python中json库的操作方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中json库的操作方法...
    99+
    2023-07-05
  • python中json操作之json.loads、json.load、json.jumps及json.jump用法
    目录前言0.python类型与json类型互换表1.将json字符串转化(反序列化)(1)json.loads(2)json.load延伸:如果.json文件中有注释怎么办2.将py...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作