flask中jsonify和json区别

article/2025/9/12 12:09:09

一 JSON数据结构

要把json与字典区分开来 dumps(字典转换成Json)                loads(Json转换成字典)

Python 的字典是一种数据结构,JSON 是一种数据格式。

json 就是一个根据某种约定格式编写的纯字符串,不具备任何数据结构的特征。而 python 的字典的字符串表现形式的规则看上去和 json 类似,但是字典本身是一个完整的数据结构,实现了一切自身该有的算法。

Python的字典key可以是任意可hash对象,json只能是字符串。

形式上有些相像,但JSON是纯文本的,无法直接操作。

1.python dict 字符串用单引号,json强制规定双引号。
2.python dict 里可以嵌套tuple,json里只有array。 json.dumps({1:2}) 的结果是 {"1":2}; json.dumps((1,2)) 的结果是[1,2]
3.json key name 必须是字符串,   python 是hashable,  {(1,2):1} 在python里是合法的,因为tuple是hashable type;{[1,2]:1} 在python里TypeError: unhashable "list"
4.json: true false null ;  python:True False None

python {"me": "我"} 是合法的;    json 必须是 {"me": "\u6211"}
 

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。

官方文档:http://docs.python.org/library/json.html

Json在线解析网站:http://www.json.cn/#

Python中的Json模块

导入json即可开始使用:import json

json模块提供了四个功能:dumps、dump、loads、load,用于字符串 和 python数据类型间进行转换。

1.json.loads()

Json -> Python字典

import jsonstrList = '[1, 2, 3, 4]'strDict = '{"city": "北京", "name": "大猫"}'json.loads(strList)
# [1, 2, 3, 4]json.loads(strDict) # json数据自动按Unicode存储
# {u'city': u'\u5317\u4eac', u'name': u'\u5927\u732b'}

2.json.dumps()

Python字典 -> Json

import json
import chardetlistStr = [1, 2, 3, 4]
tupleStr = (1, 2, 3, 4)
dictStr = {"city": "北京", "name": "大猫"}json.dumps(listStr)
# '[1, 2, 3, 4]'
json.dumps(tupleStr)
# '[1, 2, 3, 4]'# 注意:json.dumps() 序列化时默认使用的ascii编码
# 添加参数 ensure_ascii=False 禁用ascii编码,按utf-8编码
# chardet.detect()返回字典, 其中confidence是检测精确度json.dumps(dictStr)
# '{"city": "\\u5317\\u4eac", "name": "\\u5927\\u5218"}'chardet.detect(str(json.dumps(dictStr)).encode())
# {'confidence': 1.0, 'encoding': 'ascii'}print(json.dumps(dictStr, ensure_ascii=False))
# {"city": "北京", "name": "大刘"}chardet.detect(json.dumps(dictStr, ensure_ascii=False))
# {'confidence': 0.99, 'encoding': 'utf-8'}

3.json.dump()

将Python内置类型序列化为json对象后写入文件

import jsonlistStr = [{"city": "北京"}, {"name": "大刘"}]
json.dump(listStr, open("listStr.json","w"), ensure_ascii=False)dictStr = {"city": "北京", "name": "大刘"}
json.dump(dictStr, open("dictStr.json","w"), ensure_ascii=False)

4.json.load()

读取文件中json形式的字符串元素 转化成python类型

import jsonstrList = json.load(open("listStr.json"))
print(strList)# [{u'city': u'\u5317\u4eac'}, {u'name': u'\u5927\u5218'}]strDict = json.load(open("dictStr.json"))
print(strDict)
# {u'city': u'\u5317\u4eac', u'name': u'\u5927\u5218'}

二 Flask jsonify函数

简单,快速是Flask自带的模块 功能类似于json.dumps(),但是会把返回的Content-Typetext/html转换成带json特征的 application/json

Response在Flask框架中是一个类,return 结果给Flask的时候,他会判断结果的类型,如果是string,就当字符串封装为Response放回。 如果是jsonify会被直接转化为json类型的Response对象返回,并且回复头显示application/json类型

使用演示

打印jsonify内的数据:

from flask import jsonify
from flask import Flask
app=Flask(__name__)
with app.app_context():
aaa={
"a":1,
"b":2,
"c":[3,4,5]
}
response_obj=jsonify(aaa) #
print(type(response_obj)) #flask.wrappers.Response
print(response_obj.data) #打印数据
print(response_obj.content_type) #打印内容类型
print(response_obj.status) #状态码及状态(字符串)
print(response_obj.status_code) #状态码 (int类型)
print(response_obj.is_json) #是否是json (bool类型)

demo:

python的flask框架为用户提供了直接返回包含json格式数据响应的方法,即jsonify,在开发中会经常用到。如下一段简单的flask后端代码,服务端视图函数根据请求参数返回json格式的数据到客户端。

  1. from flask import Flask  
  2. from flask import jsonify  
  3. from flask import Response  
  4.   
  5.   
  6. app = Flask(__name__)  
  7. @app.route('/hello/<name>/<words>',methods=['GET'])  
  8. def hello(name,words):  
  9.     return jsonify({'name':name,'words':words})#也可以传入key=value形式的参数,如jsonify(name=name,words=words)  
  10.   
  11.   
  12. if __name__ == '__main__':  
  13.     app.run()  

 用chrome浏览器访问得到的页面如下图:

现在我们改为使用python自带的json库json.dumps作为视图函数的直接返回值,代码如下:

  1. from flask import Flask  
  2. from flask import jsonify  
  3. from flask import Response  
  4.   
  5.   
  6. app = Flask(__name__)  
  7. @app.route('/hello/<name>/<words>',methods=['GET'])  
  8. def hello(name,words):  
  9.     return json.dumps({'name':name,'words':words})  
  10.   
  11.   
  12. if __name__ == '__main__':  
  13.     app.run()  


PS:直接返回json.dumps的结果是可行的,因为flask会判断并使用make_response方法自动构造出响应,只不过响应头各个字段是默认的。若要自定义响应字段,则可以使用make_response或Response自行构造响应。用chrome访问的响应页面如下图。

总结:从上面可以看出:两者似乎只是Content-Type发生了变化。由此可以推测出jsonify(application/json)<==>修改返回头后的json.dump(text/html)

参考:https://blog.csdn.net/kun1280437633/article/details/80377734


http://chatgpt.dhexx.cn/article/yEM0FQD6.shtml

相关文章

关于flask入门教程-记录集转jsonify

Flask 框架里&#xff0c;可以用 jsonify 返回 json 数据&#xff0c;但是为什么不用 Python 自带的 json 模块返回 JSON 数据呢&#xff1f; 其实两者是差不多的&#xff0c;jsonify指明了Content-Type 是 application/json &#xff0c; 这样做是符合 HTTP 协议的规定的&…

Flask 的 jsonify 理解

文章目录 python 代码解决原因Content-Type的区别 python 代码 # -*- coding:utf-8 -*- from flask import Flask, jsonifyapp Flask(__name__)urls [{id: 1,title: python,description: https://www.python.org/},{id: 2,title: flask,description: https://flask.palletsp…

Flask中jsonify和json.dumps用法以及区别(简单案例)

环境&#xff1a;python3.6, Flask1.0.3 flask提供了jsonify函数供用户处理返回的序列化json数据&#xff0c; 而python自带的json库中也有dumps方法可以序列化json对象. 其二者的区别&#xff0c;写个简单的案例实测一下便见分晓。 from flask import Flask from flask im…

const常量函数详解

在类中&#xff0c;如果你不希望某些数据被修改&#xff0c;可以使用const关键字加以限定。const 可以用来修饰成员变量和成员函数。 const常量与指针 const int *p1与const int *p2的顺序不同&#xff0c;但是他们指向的值都不能改变&#xff0c;上述代码说明虽然指向的值不能…

C++const函数的运用:深度解析const函数的魅力

C 深度解析const函数的魅力 1. C const函数的基本概念&#xff08;Basic Concepts of const Functions in C&#xff09;1.1 const函数的定义与特性&#xff08;Definition and Characteristics of const Functions&#xff09;1.2 const函数的使用场景&#xff08;Usage Scena…

const 用法

const 用法 const 修饰变量&#xff0c;这个变量被称为常变量&#xff0c;不能被修改&#xff0c;但本质上还是一个变量 #通过指针改变num的值 int main() {int num 10;int* p &num;*p 20;printf("%d ", num);return 0; }#这里num被 const修饰本来不能被修改…

const成员函数

const成员函数 const修饰成员函数的时候&#xff0c;const需要放在成员函数的后面&#xff0c;不能放在一开始&#xff0c;如果放在一开始的话&#xff0c;那么const其实是在修饰成员函数的返回值&#xff0c;而不是在修饰成员函数了 const成员函数中不能修改成员变量 普通成员…

const函数

const是衡量一个程序员是否老道的一个标准&#xff0c;除了修饰变量之外&#xff0c;还可以修饰函数&#xff0c;主要有以下几种形式 const int& fun(int& a); //修饰返回值 int& fun(const int& a); //修饰形参 int& fun(int& a) const{} //const成员…

梳理c++ const 修饰函数

const是衡量一个程序员是否老道的一个标准&#xff0c;除了修饰变量之外&#xff0c;还可以修饰函数&#xff0c;主要有以下几种形式 const int& fun(int& a); //修饰返回值 int& fun(const int& a); //修饰形参 int& fun(int& a) const{} //const成员…

C++基础——const成员函数

目录 一.Const成员函数 1.定义&#xff1a; 2.格式&#xff1a; 3.代码示例&#xff1a; .h文件&#xff1a; definition.cpp文件 特性&#xff1a; 例&#xff1a; 那么const对象既可以调用非const型成员函数吗&#xff1f; 问题3.const成员函数内可以调用其它…

JAVA输入/输出流详细讲解

应用程序经常需要访问文件和目录&#xff0c;读取文件信息或写入信息到文件&#xff0c;即从外界输入数据或者向外界传输数据&#xff0c;这些数据可以保存在磁盘文件、内存或其他程序中。在Java中&#xff0c;对这些数据的操作是通过I/O技术来实现的。所谓I/O技术&#xff0c;…

java输出语句_java输入输出语句是什么

在java中,输入语句为“Scanner对象.next()系列方法”,例“Scanner对象.nextLine()”表示输入字符串;输出语句为“System.out.println()”、“System.out.print()”等。 对于经常上机刷题的来说,首先得解决输入输出方法,Java的输入输出流在Java学习过程的后面部分才会接触,…

Java输入输出处理

活动地址&#xff1a;CSDN21天学习挑战赛 &#x1f341;博客主页&#xff1a;&#x1f449;不会压弯的小飞侠 ✨欢迎关注&#xff1a;&#x1f449;点赞&#x1f44d;收藏⭐留言✒ ✨系列专栏&#xff1a;&#x1f449;21天挑战回顾java ✨知足上进&#xff0c;不负野心。 &am…

java 输入输出总结(牛客、笔试、机试)

因为踩过坑&#xff0c;所以特别整理了一下&#xff0c;发现其实不少小伙伴同样都是这样&#xff0c;特别简单小结一下&#xff0c;java网上笔试的时候OJ的一些要求的实例 1 单行输入 // 本题为考试单行多行输入输出规范示例&#xff0c;无需提交&#xff0c;不计分。 import j…

java输入输出的方法

java输入输出 目录 一、控制台输入输出 二、文件读写 一、控制台输入输出 java控制台的输入输出主要依赖于scanner类&#xff0c;使用Scanner scannernew Scanner(System.in)获取了控制台输入的字段&#xff0c;其中system.in就表示这个对象读取的是控制台。 public static …

java读取输出流_Java输入输出流

1什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作。Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。 Ja…

Java 输入输出流学习总结

文章目录 前言&#xff1a;为什么要有输入输出流一、Java 的标准输入输出标准输入 System.in标准输出 System.out程序 exp8_3&#xff1a;简单的输入输出 二、输入输出流框架三、输入输出流类的应用课本程序 exp8.4改写 exp8.4(1)改写 exp_8.4(2) 四、RandomAccessFile 类输入输…

java 输入输出流

java I/O流 在java中所有数据都是使用流读写的。流是一组有序的数据序列&#xff0c;将数据从一个地方带到另一个地方。根据数据流向的不同&#xff0c;可以分为输入&#xff08;Input&#xff09;流和输出&#xff08;Output&#xff09;流两种。 为什么要使用输入输出流 例…

Java(2)-Java IO输入输出流

一.什么是IO Java中I/O操作主要是指使用Java进行输入&#xff0c;输出操作. Java所有的I/O机制都是基于数据流进行输入输出&#xff0c;这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据源的对象都会提供以数据流的方式读…

Java——输入输出

本篇主要介绍Java的输入与输出&#xff0c;当然&#xff0c;这里说的是控制台下的输入与输出&#xff0c;窗口程序的设计将会再后续篇章中有详细说明。   Java的输出很简单&#xff0c;调用System.out.println()即可打印输出你想要输出的内容。我们之前也已经看到过。调用pr…