JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。 JSON采用完全独立于程序语言的文本格式,但是也使用了类C语言的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。

JSON简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构。

  • 对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。

  • 数组:数组在js中是中括号“[]”括起来的内容,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。

Python的json模块提供了一种很简单的方式来编码和解码JSON数据。 其中两个主要的函数是 json.dumps() 和 json.loads() ,下面举例看Ptython是如何通过方法进行编码解码的:

import jsonobj = [[1, 2, 3], 123, 123.123, 'abc', {'key1': (1, 2, 3), 'key2': (4, 5, 6)},True,False,None]print '*****Encoding*****'dus = json.dumps(obj)print type(dus)print dusprint '*****Decoding*****'los=json.loads(dus)print type(los)print los

运行结果:*****Encoding*****<type 'str'>[[1, 2, 3], 123, 123.123, "abc", {"key2": [4, 5, 6], "key1": [1, 2, 3]}, true, false,null]*****Decoding*****<type 'list'>[[1, 2, 3], 123, 123.123, u'abc', {u'key2': [4, 5, 6], u'key1': [1, 2, 3]}, True, False,None]

从例子中可以看出json.dumps()方法返回了一个str对象,json.loads()方法返回了原始的对象;其实在JSON的编码过程中,会存在从python原始类型向json类型的转化过程,例子中有些数据类型进行了改变,如元组则转换为了列表;Python-->Json具体的转化如下:

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

其实在JSON的解码过程中,会存在从json原始类型向python类型的转化过程,例子中有些数据类型进行了改变,如字符转换为了Unicode;Json-->Python具体的转化如下:

object  dict
array list
number(int)

int,long

number(real) float
true True
false False
null None
string Unicode

如果你要处理的是文件而不是字符串,你可以使用 json.dump() 和 json.load() 来编码和解码JSON数据。如下例子:

import jsonobj = [[1, 2, 3], 123, 123.123, 'abc', {'key1': (1, 2, 3), 'key2': (4, 5, 6)},True,False,None]print '*****Encoding*****'dus = json.dumps(obj)print type(dus)print dusprint '*****Decoding*****'los=json.loads(dus)print type(los)print los# Writing JSON datawith open('data.json', 'w') as f:    json.dump(obj, f)# Reading data backwith open('data.json', 'r') as f:    data = json.load(f)

data.json文件:[[1, 2, 3], 123, 123.123, "abc", {"key2": [4, 5, 6], "key1": [1, 2, 3]}, true, false, null]

从例子中可以看出:

编码过程,是把python对象转换成json对象的一个过程,常用的两个函数是dumps和dump函数。两个函数的唯一区别就是dump把python对象转换成json对象生成一个fp的文件流,而dumps则是生成了一个字符串;

解码过程,是把json对象转换成python对象的一个过程,常用的两个函数是loads和load函数。两个函数的唯一区别就是load把python对象转换成json对象生成一个fp的文件流,而loads则是生成了一个字符串;

除了上述简单的用法外,dump的第一个参数是对象字典,第二个参数是文件对象,可以直接将转换后的json数据写入文件,dumps的第一个参数是对象字典,其余都是可选参数。dump和dumps的可选参数相同,这些参数都相当实用,如下:

ensure_ascii 默认为True,保证转换后的json字符串中全部是ascii字符,非ascii字符都会被转义。如果数据中存在中文或其他非ascii字符,最好将ensure_ascii设置为False,保证输出结果正常;

indent 缩进,默认为None,没有缩进,设置为正整数时,输出的格式将按照indent指定的半角空格数缩进;

separators 设置分隔符,默认的分隔符是(',',':'),如果需要自定义json中的分隔符,例如调整冒号前后的空格数,可以按照(item_separator, key_separator)的形式设置;

sort_keys 默认为False,设为True时,输出结果将按照字典中的key排序;

如下例子:

import jsonject=[{"name":"测试","age":16},(2,3),1]dus = json.dumps(ject)ass=json.dumps(ject,ensure_ascii=False)sor=json.dumps(ject,sort_keys=True)ind=json.dumps(ject,sort_keys=True,indent=4)se=json.dumps(ject,separators=(',',':'))print assprint dusprint sorprint indprint se

运行结果:[{"age": 16, "name": "测试"}, [2, 3], 1][{"age": 16, "name": "\u6d4b\u8bd5"}, [2, 3], 1][{"age": 16, "name": "\u6d4b\u8bd5"}, [2, 3], 1][    {        "age": 16,         "name": "\u6d4b\u8bd5"    },     [        2,         3    ],     1][{"age":16,"name":"\u6d4b\u8bd5"},[2,3],1]

转载于:https://blog.51cto.com/dyqd2011/1981281

Pthon JSON相关推荐

  1. python建立数据库并序列化_Python之数据序列化(json、pickle、shelve)

    一.python类型数据和JSON数据格式互相转换 pthon 中str类型到JSON中转为unicode类型,None转为null,dict对应object 二. 序列化/反序列化 将对象转换为可通 ...

  2. 【golang程序包推荐分享】分享亿点点golang json操作及myJsonMarshal程序包开发的踩坑经历 :)

    目录[阅读时间:约5分钟] 一.概述 1.Json的作用 2.Go官方 encoding/json 包 3. golang json的主要操作 二.Json Marshal:将数据编码成json字符串 ...

  3. Go 知识点(04)— 结构体字段转 json格式 tag 标签的作用

    我们知道在 Go 语言中无论是变量.常量还是函数,对于首字母大小写有不同的处理. 首字母大写,标志着该字段或者函数是能导出的,也就是可以被其它包所能访问的: 首字母小写,标志着该字段是私有的,只能在本 ...

  4. VS Code 配置调试参数、launch.json 配置文件属性、task.json 变量替换、自动保存并格式化、空格和制表符、函数调用关系、文件搜索和全局搜索、

    1. 生成配置参数 对于大多数的调试都需要在当前项目目录下创建一个 lanch.json 文件,位置是在当前项目目录下生成一个 .vscode 的隐藏文件夹,在里面放置一些配置内容,比如:settin ...

  5. Python 标准库之 json

    1. josn 定义 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.JSON的数据格式其实就是python里面的字典格式,里面可以包含 ...

  6. python中如何对复杂的json数据快速查找key对应的value值(使用JsonSearch包)

    前言 之前在实际的项目研发中,需要对一些复杂的json数据进行取值操作,由于json数据的层级很深,所以经常取值的代码会变成类似这样: value = data['store']['book'][0] ...

  7. 数据库里存json数据

    需求: 查询上个月每个人各个插件的总加分汇总为一个json存储到一个字段里 查询上个月每个组织机构插件的各个插件的总加分汇总为一个json存储到一个字段里 流程: 查询后返回结果是一个List集合,每 ...

  8. http传输json文件_python

    https://cloud.tencent.com/developer/article/1571365 http传输图片 https://www.cnblogs.com/jruing/p/122156 ...

  9. python:Json模块dumps、loads、dump、load介绍

    20210831 https://www.cnblogs.com/bigtreei/p/10466518.html json dump dumps 区别 python:Json模块dumps.load ...

最新文章

  1. revit建筑样板_Revit出建筑施工图步骤及注意事项
  2. ScheduledThreadPoolExecutor详解
  3. bootstrap 开源框架demo_高大上的开源Springboot企业级用户权限系统
  4. python--17个新手常见Python运行时错误
  5. python静态递归函数_Python递归函数相关
  6. Spark streaming粗粒度工作原理
  7. 三星电子预计第四季度营业利润为9万亿韩元 低于分析师预期
  8. Python接口自动化之接口依赖
  9. [C/CPP系列知识] C++中extern “C” name mangling -- Name Mangling and extern “C” in C++
  10. (翻译)《介绍 GENEVA Beta 1 白皮书》(3)
  11. 谷歌翻译突然用不了了
  12. 【机器人学导论】第四章.传感器
  13. protocal buffer repeate 关键字
  14. android微信版本怎么升级,微信版本怎么看 微信版本升级更新至最新版本方法介绍...
  15. 国外15种手机游戏引擎和开发工具介绍
  16. 163个人电子邮箱如何注册申请,解密163个人邮箱如何注册?
  17. 嵌入式处理器用能量采集技术特别报告
  18. java超市购物系统类图,UML实例(四):在线购物系统顺序图
  19. android studio 使用lint工具优化app时全过程记录
  20. XML采用Boost::regex解析实例

热门文章

  1. 「每周CV论文推荐」 初学深度学习单图三维人脸重建需要读的文章
  2. 「模型解读」resnet中的残差连接,你确定真的看懂了?
  3. 2019年上半年收集到的人工智能LSTM干货文章
  4. 重磅新政!土拍规则大调整!土地市场将迎“大降温”
  5. 法国科学家发布AI模型,阐释蛋白结构和功能及进化关系
  6. 2018AI最佳应用回顾
  7. 自动驾驶中常用的四类机器学习算法
  8. 言论丨十问陆奇:百度如何才能赢得AI的未来?
  9. 有了Anaconda如何安装Pycharm以及简单使用和调试
  10. latex如何清除表格table的浮动位置(表格自动上移)