21天学Python --- 打卡3: Python && Json

在这里插入图片描述


                                        活动地址: 21天学习挑战赛.

在这里插入图片描述


1.what is json

JSON(全名:JavaScript Object Notation 对象表示法)是一种轻量级文本数据交换格式。

  • JSON独立于语言
  • JSON具有自我描述性,更易理解
  • JSON比XML更小,更快,更易解析
  • 爬虫经常会获取接口数据,一般都是JSON格式。

2.json attribute

{key1:value1, key2:value2…}

# 格式1JSON 对象
{"name": "admin", "age": 18}

# 格式2JSON 数组
{
    "student":
        [
            {"name": "小明", "age": 18},
            {"name": "小红", "age": 16},
            {"name": "小黑", "age": 20}
        ]
}

3.json model

1、使用jsON字符串生成python对象(load)

2、由python对象格式化成为ison字符串(dump)

3.1 类型转换

python transfor json

PythonJSON
dictobject
list, tuplearray
strstring
int, float, int- & float-derived Enumsnumber
Truetrue
Falsefalse
Nonenull

json transforpython

JSONPython
objectdict
arraylist
stringstr
number(int)int
number(real)float
trueTrue
falseFalse
nullNone

3.2 Json && Python

方法功能
json.dumps(obj)将python数据类型转换为json格式的字符串。
json.dump(obj, fp)将python数据类型转换并保存到son格式的文件内。
json.loads(s)将json格式的字符串转换为python的类型。
json.load(fp)从json格式的文件中读取数据并转换为python的类型。

  • json.dumps(obj)
    语法格式:json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
    sort_keys:是否排序
    indent:定义缩进距离
    separators:是一个元组,定义分隔符的类型
    skipkeys:是否允许JSON字串编码字典对象时,字典的key不是字符串类型(默认是不允许)
>>> import json

# Python字典
>>> person = {"name": "小明", "age": 30, "tel": ["888888", "1351111111"], "isonly": True}
>>> print(person)
{'name': '小明', 'age': 30, 'tel': ['888888', '1351111111'], 'isonly': True}
>>> type(person)
<class 'dict'

# Python字典转换为json字符串
>>> jsonStr = json.dumps(person) 
>>> print(jsonStr )
{"name": "\u5c0f\u660e", "age": 30, "tel": ["888888", "1351111111"], "isonly": true}
>>> type(jsonStr)
<class 'str'>
// 将内容写入json file
import json

person = {"name": "小明", "age": 30, "tel": ["888888", "1351111111"], "isonly": True}

jsonStr = json.dumps(person)

with open('test.json', 'w', encoding='utf-8') as f:  # 打开文件
    f.write(jsonStr)  # 在文件里写入转成的json串


  • json.dump(obj,fp)
    语法格式:json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
    sort_keys:是否排序
    indent:定义缩进距离
    separators:是一个元组,定义分隔符的类型
    skipkeys:是否允许JSON字串编码字典对象时,字典的key不是字符串类型(默认是不允许)
import json

person = {"name": "小明", "age": 30, "tel": ["888888", "1351111111"], "isonly": True}

json.dump(person, open('data.json', 'w'))
import json

person = {"name": "小明", "age": 30, "tel": ["888888", "1351111111"], "isonly": True}

json.dump(person, open('data.json', 'w'), sort_keys=True, indent=4, separators=(',', ': '))

  • json.loads(s)
    语法格式:json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
>>> import json

# Python字典
>>> person = {"name": "小明", "age": 30, "tel": ["888888", "1351111111"], "isonly": True}
>>> print(person)
{'name': '小明', 'age': 30, 'tel': ['888888', '1351111111'], 'isonly': True}
>>> type(person)
<class 'dict'

# Python字典转换为json字符串
>>> jsonStr = json.dumps(person) 
>>> print(jsonStr )
{"name": "\u5c0f\u660e", "age": 30, "tel": ["888888", "1351111111"], "isonly": true}
>>> type(jsonStr)
<class 'str'>

# json字符串再转换为Python字典
>>> python_obj = json.loads(jsonStr)
>>> print(python_obj)
{'name': '小明', 'age': 30, 'tel': ['888888', '1351111111'], 'isonly': True}
>>> print(type(python_obj))
<class 'dict'>

# 打印字典的所有key
>>> print(python_obj.keys())  
dict_keys(['name', 'age', 'tel', 'isonly'])

 # 打印字典的所有values
>>> print(python_obj.values()) 
dict_values(['小明', 30, ['888888', '1351111111'], True])
import json

f = open('data.json', encoding='utf-8')
content = f.read()  # 使用loads()方法需要先读文件
python_obj = json.loads(content)
print(python_obj)

  • json.load(fp)
    语法格式:json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
import json

python_obj = json.load(open('data.json','r'))
print(python_obj)
print(type(python_obj))

总结: 不管是dump还是load,带s的都是和字符串相关的,不带s的都是和文件相关的

3.3 Xml && Json

pip install xmltodict

xml transfor json

import json
import xmltodict


def xml_to_json(xml_str):
    """parse是的xml解析器,参数需要

    :param xml_str: xml字符串
    :return: json字符串
    """
    xml_parse = xmltodict.parse(xml_str)
    # json库dumps()是将dict转化成json格式,loads()是将json转化成dict格式。
    # dumps()方法的ident=1,格式化json
    json_str = json.dumps(xml_parse, indent=1)
    return json_str


XML_PATH = './1.xml'  # xml文件的路径
with open(XML_PATH, 'r') as f:
    xmlfile = f.read()
    with open(XML_PATH[:-3] + 'json', 'w') as newfile:
        newfile.write(xml_to_json(xmlfile))

在这里插入图片描述
json transfor xml

import xmltodict
import json


def json_to_xml(python_dict):
    """xmltodict库的unparse()json转xml

    :param python_dict: python的字典对象
    :return: xml字符串
    """
    xml_str = xmltodict.unparse(python_dict)
    return xml_str


JSON_PATH = './test.json'  # json文件的路径
with open(JSON_PATH, 'r') as f:
    jsonfile = f.read()
    python_dict = json.loads(jsonfile)  # 将json字符串转换为python字典对象
    with open(JSON_PATH[:-4] + 'xml', 'w') as newfile:
        newfile.write(json_to_xml(python_dict))

在这里插入图片描述

4.parse json

4.1 json string

import json

json_str = '{"name":"test", "type":{"name":"seq", "parameter":["1", "2"]}}'
print(json_str)
print(type(json_str))
print('-' * 20)

# 1JSON文件转换为Python对象
python_obj = json.loads(json_str)
print(python_obj)
print(type(python_obj))
print('-' * 20)

# 2、定位具体的数据节点
print(python_obj.keys())
print(python_obj.values())
print(python_obj["name"])
print(python_obj["type"]["name"])
print(python_obj["type"]["parameter"][0])
print(python_obj["type"]["parameter"][1])

4.1 json file

{
  "student": {
    "course": {
      "name": "math",
      "score": "90"
    },
    "info": {
      "sex": "male",
      "name": "name"
    },
    "stid": "10213"
  }
}

 
```javascript
import json

# 1JSON文件转换为Python对象
python_obj = json.load(open('test.json', 'r'))
print(python_obj)
print(type(python_obj))

print("-" * 20)
# 2、解析json文件

# 输出cours节点e下的数据
print(python_obj['student']['course']['name'])  # 输出name
print(python_obj['student']['course']['score'])  # 输出score

# 输出info节点下的数据
print(python_obj['student']['info']['sex'])  # 输出sex
print(python_obj['student']['info']['name'])  # 输出name

# 输出stid节点下的数据
print(python_obj['student']['stid'])  # 输出stid
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百世经纶『一页書』

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值