zl程序教程

您现在的位置是:首页 >  前端

当前栏目

Json

2023-09-11 14:14:27 时间

Python中的json操作
1.什么是Json?
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它是JavaScript的子集,易于人阅读和编写。
前端和后端进行数据交互,其实就是JS和Python进行数据交互

JSON注意事项:
(1)名称必须用双引号(即:””)来包括
(2)值可以是双引号包括的字符串、数字、true、false、null、JavaScript数组,或子对象。

2.python数据类型与json数据类型的映射关系
Python

JSON
dict object
list, tuple array
str, unicode string
int, long, float number
True true
False
false

None null
3. json中常用的方法
在使用json这个模块前,首先要导入json库:import json

方法 描述
json.dumps() 将 Python 对象编码成 JSON 字符串
json.loads() 将已编码的 JSON 字符串解码为 Python 对象
json.dump() 将Python内置类型序列化为json对象后写入文件
json.load() 读取文件中json形式的字符串元素转化为Python类型
举例:

3-1 json.dumps()
import json

data = {‘name’:‘nanbei’,‘age’:18}
#将Python对象编码成json字符串
print(json.dumps(data))
结果:

{“name”: “nanbei”, “age”: 18}
注: 在这里我们可以看到,原先的单引号已经变成双引号了

3-2 json.loads()
import json

data = {‘name’:‘nanbei’,‘age’:18}
#将Python对象编码成json字符串
#print(json.dumps(data))
#将json字符串编码成Python对象
a = json.dumps(data)
print(json.loads(a))
结果:

{‘name’: ‘nanbei’, ‘age’: 18}
在这里举个元组和列表的例子:

import json

data = (1,2,3,4)
data_json = [1,2,3,4]
#将Python对象编码成json字符串
print(json.dumps(data))
print(json.dumps(data_json))
#将json字符串编码成Python对象
a = json.dumps(data)
b = json.dumps(data_json)
print(json.loads(a))
print(json.loads(b))
结果:

[1, 2, 3, 4]
[1, 2, 3, 4]
[1, 2, 3, 4]
[1, 2, 3, 4]
可以看到,元组和列表解析出来的均是数组。

3-3 json.dump()
import json

data = {
‘nanbei’:‘haha’,
‘a’:[1,2,3,4],
‘b’:(1,2,3)
}
with open(‘json_test.txt’,‘w+’) as f:
json.dump(data,f)
查看结果:

3-4 json.load()
import json

data = {
‘nanbei’:‘haha’,
‘a’:[1,2,3,4],
‘b’:(1,2,3)
}
with open(‘json_test.txt’,‘w+’) as f:
json.dump(data,f)

with open(‘json_test.txt’,‘r+’) as f:
print(json.load(f))
结果:

{‘a’: [1, 2, 3, 4], ‘b’: [1, 2, 3], ‘nanbei’: ‘haha’}
4.参数详解:
dump(obj,skipkeys=False, ensure_ascii=True, check_circular=True,
allow_nan=True, cls=None, indent=None, separators=None,
default=None, sort_keys=False, **kw):

函数作用: 将Python的对象转变成JSON对象

skipkeys: 如果为True的话,则只能是字典对象,否则会TypeError错误, 默认False

ensure_ascii: 确定是否为ASCII编码

check_circular: 循环类型检查,如果为True的话

allow_nan: 确定是否为允许的值

indent: 会以美观的方式来打印,呈现,实现缩进

separators: 对象分隔符,默认为,

encoding: 编码方式,默认为utf-8

sort_keys: 如果是字典对象,选择True的话,会按照键的ASCII码来排序

对于dump来说,只是多了一个fp参数

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)
Serialize obj as a JSON formatted stream to fp (a
.write()-supporting file-like object).
简单说就是dump需要一个类似文件指针的参数(并不是真正的指针,可以称之为文件对象),与文件操作相结合,即先将Python文件对象转化为json字符串再保存在文件中。。。

Body.json()
Body mixin 的 json() 方法接收一个 Response 流,并将其读取完成。它返回一个 Promise,Promise 的解析 resolve 结果是将文本体解析为 JSON。
语法
response.json().then(data => {
// do something with your data
});
参数
没有。

返回值
返回一个被解析为JSON格式的promise对象,这可以是任何可以由JSON表示的东西 - 一个object,一个array,一个string,一个number…

示例
在我们的 fetch json 示例 中(运行 fetch json live), 我们使用 Request.Request 构造函数创建一个新的请求, 然后使用它来获取一个 .json 文件。当获取成功时,我们使用 json() 读取并解析数据,然后像预期的那样从结果对象中读取值,并将其插入到列表项中以显示我们的产品数据。

const myList = document.querySelector(‘ul’);
const myRequest = new Request(‘products.json’);

fetch(myRequest)
.then(response => response.json())
.then(data => {
for (const product of data.products) {
let listItem = document.createElement(‘li’);
listItem.appendChild(
document.createElement(‘strong’)
).textContent = product.Name;
listItem.append(
can be found in ${ product.Location }. Cost:
);
listItem.appendChild(
document.createElement(‘strong’)
).textContent = £${product.Price};
myList.appendChild(listItem);
}
});
规范
Specification Status Comment
Fetch
Body.json() Living Standard Initial definition
浏览器兼容性
Report problems with this compatibility data on GitHub
desktop mobile
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet
jsonExperimental
Full support42 Full support18 Full support39 No supportNo Full support29 Full support10.1 No supportNo Full support42 No supportNo Full support29 Full support10.3 Full support4.0
Legend
Full supportFull support
No supportNo support
Experimental. Expect behavior to change in the future.

前后端交互数据格式
前后端交互常用的数据格式有:json、xml、form表格

  1. json(主流数据格式)
    使用json数据结构,传输效率高,解析简单,是目前最流行的一种数据交互格式。
    数据交互格式方式

基本类型
数组类型
对象嵌套
实例操作

基本类型

{“键” : 值, “键” : “值”,…},以大括号开始,键的名称加上冒号,然后跟上对应的的值,若有其他键值对则以逗号进行分割。

{
“name”: “张三”,
“age”: 18,
“sex”: true
}

数组类型

[{“键” : 值, “键” : “值”},{“键” : 值, “键” : “值”},…],以中括号开始,其间的数据通过逗号进行分割。

[
{
“name”: “张三”,
“age”: 18,
“sex”: true
},
{
“name”: “李四”,
“age”: 19,
“sex”: false
}
]

对象嵌套
又上面两种类型组成,因为值的不固定性,可以演变出各种各样的嵌套类型。

{
“name”: “teacher”,
“computer”: {
“CPU”:"intel7,
“disk”: “512G”
},
“students”: [
{
“name”: “张三”,
“age”: 18,
“sex”: true
},
{
“name”: “李四”,
“age”: 19,
“sex”: false
}
]
}

  1. XML(基本不怎么用了)
    具有跨平台、跨语言的特点。
    XML又称为可扩展标记语言,是指跨语言的数据格式。目前json正在慢慢取代它的地位,但在各个地方我们还是能经常见到,所以了解它也是我们的必须之课。

一个简单的xml示例

<?xml version="1.0" encoding="ISO-8859-1"?> George John Reminder Don't forget the meeting! 1 2 3 4 5 6 7 所有XML元素都须有关闭标签 在html中,经常会看到没有关闭标签的元素,但在xml中,省略关闭标签是非法的,所有元素都必须有关闭标签。 xml标签对大小写敏感 xml元素使用xml标签进行定义,xml标签对大小写敏感。在xml中,标签与标签是不同的,必须使用相同大小写来编写打开标签和关闭标签。 xml必须正确嵌套 正确嵌套是指元素是在元素内打开的,那么它必须在元素内关闭。 xml文档必须有根元素 xml文档必须有一个元素是所有其他元素的父元素,该元素称为根元素。 xml的属性值必须加引号 与html类似,xml也可拥有属性,且属性值须加上引号。 3. form表格 这个格式会把数据转成name1=value1&name2=value2这样的格式,在调试器中会显示form data,然后是对应的键值。
  1. YAML
    是一种直观的能够被电脑识别的数据序列号格式。