Backend - Python 序列化

目录

一、作用

(一)代码块存入数据库

(二)前后端传递数据

1. 前端

(1)JSON.stringify()

(2)JSON.parse()

2. 后端

(1)json.dumps()

(2)json.loads()

(3)json.loads() 问题:JSONDecodeError('Expecting property name enclosed in double quotes: line 1 column 2 (char 1)')

(4)python 的 requests 库的 json()

3. 前后端的传值格式

(三)查看对象格式


序列化:将内存中的不可持久化和传输对象,转换为可方便持久化和传输对象的过程。

一、作用

(一)代码块存入数据库

        将一段方法的代码块,进行序列化,完整的存入到数据库中。

        当调用数据库的这段序列化数据时,依旧可以执行这个代码块。

(二)前后端传递数据

1. 前端

(1)JSON.stringify()

        将一个 JavaScript 对象或值编码为json字符串。 (包成JSON)

(2)JSON.parse()

        用来解析json字符串,还原由字符串包裹的JavaScript值或对象。 (解除JSON)

注意:前端转换JSON格式时,是大写的JSON

2. 后端

(1)json.dumps()

① 理解

        将 Python 对象编码为json字符串。(包成JSON)

        常用于处理前、后端相互传递的数据。

② 写法

        使用 json.dumps(),而不是json.dump()。

        前者是字符串,后者是文件流。

③ 例子

import json
def post(self, request)
    res = request.data 
    res = json.dumps(res) # 即可获得字串数据
(2)json.loads()

        将json字符串解码为 Python 数据类型。(解除JSON)

        例如:前端的阵列 AA ,使用 JSON.stringify() 编码  ->  得到 json 格式的值 BB ( str 格式,包裹着阵列) ->  后端接收的BB,使用 json.loads() 解码  ->  得到列表值CC。

(3)json.loads() 问题:JSONDecodeError('Expecting property name enclosed in double quotes: line 1 column 2 (char 1)')

        原因:

        json.loads() 里的值若是字串包字典,则字典中的key,必须有双引号!!无论是单引号,还是无引号,都会报错。

        解决:若字串里的字典格式无误,只是单引号的问题,则将单引号转换为双引号

import json 
mystr.replace("\'", "\"")
res = json.loads(mystr)
(4)python 的 requests 库的 json()

① 理解

        处理API请求返回后的数据。

② 例子

import requests
response = requests.get('http://www.XXX.com', params=data)  # 获得API调用后得到的结果数据
res = response.json()  # 将API结果数据字串化

3. 前后端的传值格式

(1)前端传后端时,无论是“阵列”或是“字典”,都应该用JSON格式包裹。

(2)后端传前端时,一般用JsonResponse。或者在前端ajax处加一属性:dataType:'json' 。

        dataType: 'json'的作用是:不用判断后端传的数据,是否为JSON格式、是否需要用JSON.parse()处理。

参考另一篇文章:Backend - Django JsonResponse & HttpResponse-CSDN博客

(三)查看对象格式

使用网上工具:http://json.parser.online.fr/

你可能感兴趣的:(python,json,requests)