JSON数据结构

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

参考:

  1. Python 的字典是一种数据结构,JSON 是一种数据格式。
  2. json 就是一个根据某种约定格式编写的纯字符串,不具备任何数据结构的特征。而 python 的字典的字符串表现形式的规则看上去和 json 类似,但是字典本身是一个完整的数据结构,实现了一切自身该有的算法。
  3. Python的字典key可以是任意可hash对象,json只能是字符串。
  4. 形式上有些相像,但JSON是纯文本的,无法直接操作。
  5. 1.python dict 字符串用单引号,json强制规定双引号。
  6. 2.python dict 里可以嵌套tuple,json里只有array json.dumps({1:2}) 的结果是 "1":2}; json.dumps((1,2)) 的结果是[1,2]
  7. 3.json key name 必须是字符串, python hashable, {(1,2):1} python里是合法的,因为tuplehashable type;{[1,2]:1} pythonTypeError: unhashable "list"
  8. 4.json: true false null python:True False None
  9. python {"me": "我"} 是合法的; json 必须是 {"me": "\u6211"}

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

JSON和XML的比较可谓不相上下。

Python 3中自带了JSON模块,直接import json就可以使用了。

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

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

一个简单的Json数据:

  1. {
  2. "name":"张三",
  3. "age":19,
  4. "major":["挖掘机","炒菜","编程"],
  5. "hasCar":false,
  6. "child":[{"name":"小明","age":2},{"name":"小花","age":2}]
  7. }

Python中的Json模块

导入json即可开始使用

  1. import json

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

1.json.loads()

Json -> Python字典

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

2.json.dumps()

Python字典 -> Json

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

3.json.dump()

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

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

4.json.load()

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

  1. import json
  2. strList = json.load(open("listStr.json"))
  3. print(strList)
  4. # [{u'city': u'\u5317\u4eac'}, {u'name': u'\u5927\u5218'}]
  5. strDict = json.load(open("dictStr.json"))
  6. print(strDict)
  7. # {u'city': u'\u5317\u4eac', u'name': u'\u5927\u5218'}

Flask jsonify函数

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

Response在Flask框架中是一个class,当application的view方法处理完成,return 结果给Flask的时候,他会判断结果的类型,如果是string,则分会text/html, 如果是tuple, 同样

使用演示



注意:jsonify不能跟json一样转换成字典或字符串在控制台打印出来,只有在Flask的return过程中才能使用,听起来虽然有点鸡肋 但是在Flask开发中确实好用;奥利给!

Python json函数与Flask jsonify函数的更多相关文章

  1. python json中的 dumps loads函数

    一.概念理解 1.json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串) (1)json.dumps()函数是将一个Python数据类型列表进行js ...

  2. python学习笔记(六)- 函数、文件json与python字典互操作

    1.函数:(方法.功能) 1.提高代码的复用性 2.让代码更简洁.简化代码 1)定义一个简单的函数 def sayHello(): #函数名,定义函数 print("hello") ...

  3. python语言(三)文件修改、函数、json操作、监控日志代码、高效读取文件

    1.文件操作(2)   代码 f = open('a.txt','a') # "a" 如果源文件不在,会自动创建 f.write('abc') result = f.read() ...

  4. Flask视图函数与模板语法

    1.Django中的CBV模式 ​ 2.Flask中的CBV和FBV def auth(func):     def inner(*args, **kwargs):         result =  ...

  5. Python学习第二阶段day1 内置函数,序列化,软件目录开发规范

    内置函数 1.abs()  求绝对值 2.all()    所有元素为真才返回真 all( [1,1,2,3,-1] ) 值为True 3.any()   所有元素为假才返回假  any([0,0,0 ...

  6. 翻译《Writing Idiomatic Python》(二):函数、异常

    原书参考:http://www.jeffknupp.com/blog/2012/10/04/writing-idiomatic-python/ 上一篇:翻译<Writing Idiomatic ...

  7. Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数

    Python第七天   函数  函数参数   函数里的变量   函数返回值  多类型传值     函数递归调用   匿名函数   内置函数 目录 Pycharm使用技巧(转载) Python第一天   ...

  8. Python第二天 变量 运算符与表达式 input()与raw_input()区别 字符编码 python转义符 字符串格式化 format函数字符串格式化 帮助

    Python第二天  变量  运算符与表达式  input()与raw_input()区别  字符编码  python转义符  字符串格式化  format函数字符串格式化  帮助 目录 Pychar ...

  9. Python基础之文件处理、函数、内置函数 (三)

    内置函数 一 详细见python文档,请点击 文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 文件句柄 = file('文件路径', '模式') 注:python中打开 ...

随机推荐

  1. redux中间件来执行异步操作

    在redux中我们都是执行同步操作,如果我们想要执行异步操作,那么我们就需要依赖到中间件,具体的中间件的概念我就不描述了相信官方文档更详尽.现在就描述下具体的用法,就已我们项目中用到的最多的数据请求为 ...

  2. AT Regular 086

    C - Not so Diverse 略 D - Non-decreasing 先找绝对值最大的数 构造出全正(最大的数为正) 或者全负(最大的数为负) 然后前缀和(正)或者后缀和(负) 操作次数2n ...

  3. Django【第15篇】:Django之Form组件归类

    Form组件归类 一.Form类 创建Form类时,主要涉及到 [字段] 和 [插件],字段用于对用户请求数据的验证,插件用于自动生成HTML; 1.Django内置字段如下: 1 Field 2 r ...

  4. [Comet OJ - Contest #9 & X Round 3] Namid[A]me

    传送门 一开始读错题了,以为是\(\sum_{1\leq u\leq v\leq n}f(u,v)\),还疑惑这题这么简单怎么没人做( 实际上是\(\sum_{1\leq u\leq v\leq n} ...

  5. 【leetcode】74. Search a 2D Matrix & 240. Search a 2D Matrix II

    题目如下:这两个题目可以用同样的代码来解答,因此就合并在一起了. 题目一: 题目二: 解题思路:两个题目的唯一区别在于第二个题目下一行的最小值不一定会小于前一行的最大值.但是不管怎么样我们可以确定的是 ...

  6. 岭回归、lasso

    参考:https://blog.csdn.net/Byron309/article/details/77716127     ----    https://blog.csdn.net/xbinwor ...

  7. php实现大视频上传

    本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...

  8. 【PowerOJ1741&网络流24题】最长递增子序列问题(最大流)

    题意: 思路: [问题分析] 第一问时LIS,动态规划求解,第二问和第三问用网络最大流解决. [建模方法] 首先动态规划求出F[i],表示以第i位为开头的最长上升序列的长度,求出最长上升序列长度K. ...

  9. jsoncpp 能做什么

    jsoncpp能做什么1)跨平台跨语言动态信息数据交换.2)作为格式化配置文件使用3)对应数据结构数据类型做序列化和反序列化4)value::toStyledString 格式化json串输出 一.w ...

  10. spring util包 StringUtils工具类中的isEmpty() 方法解析

    今天在公司看到同事写的代码,无意发现在判断字符串类型时,使用的是StringUtils工具类中的isEmpty()去判断如下所示 @RequestMapping(value = "/pub/ ...