json的两种结构以及json文件转化为python的dict的方式
2018-01-25 19:40
871 查看
1、json的两种结构:
1、对象:对象在json中表现为“{ }”括起来的内容,数据结构为键值对结构{key:value,key:value},在面向对象的语言中key为对象的属性,value为对应的属性值,。取值方法为 对象.key 获取属性值,这个属性值的类型可以是数字、字符串、数组、对象几种。 大括号{}用来描述一组“不同类型的无序键值对集合,即各个key之间没有什么明确的关系。
下面举例json的对象结构:
json中,对象的键名必须用双引号括起来;同一个对象中不应该出现两个同名的属性。
2、数组:在json中数组是用[ ]括起来的内容,数据结构为{ item1,item2,…,itemn} 其中,item是key-value键值对的形式,取值方法和数组一样,使用索引获取,其中属性值的类型可以是:数字,字符串,数组,对象(这里暗示了数组[ ]里面可以前台对象{ })几种。方括号[]用来描述一组“相同类型的有序数据集合”
这个例子中people数组包含了三个值,这些值又是json对象。
数组和对象的最后一个成员的后面不能加 “,” 。经过对象、数组这2种结构就可以组合成复杂的数据结构了。
参考网址:http://www.runoob.com/json/json-syntax.html
2、python的dict结构:
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:
.Attention
1、python字典的值可以去任何对象,既可以是python的标准对象,也可以是用户自定义的对象,但是dict的键不行。
2、不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住。
3、键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行。
3、序列化(serialization)和反序列化(deserialization):
序列化:将对象的状态信息(如python的简单数据类型:list,dict,tuple,int,float,unicode)转化为可存储或者可传输的内容(如json 、xml)的过程。
反序列化:从存储文件或者存储区域(如json 、xml)读取需要反序列化的对象状态,并重建该对象。
json:(javascript object notation)一种轻量级数据交换格式,相对于xml更简单、易阅读、编写、解析和生成,json是javascript中的一个子集
python中集成了json模块:
序列化——-encoding :将一个python对象编码成json字符串(注意:这里是指json字符串,言外之意是可以将非json字符串的文件转化为json字符串,然后再反序列化)
反序列化-—decoding:将一个字符串解码成python对象
4、序列化(serialization)和反序列化(deserialization):
序列化方式:(Python对象转换成json的对照图)
对于python对象内的各个元素,python的字典会被转化为json的对象,python的list,tuple会被转化为array,以此类推。
反序列化:(json 对象转换成Python对象的对照图)
对于json字符串内的各个元素,字符串会被转成pyhon的str,对象会被转成python的dict,数组会被转化为python的list以此类推
参考网址:https://docs.python.org/3/library/json.html
5、下面来举例子吧:
dumps是将dict转化成str格式,loads是将str转化成dict格式。
dump和load也是类似的功能,只是与文件操作结合起来了。
json文件如下:
python对象如下:
反序列化:json——>python
序列化:python——>json
1、对象:对象在json中表现为“{ }”括起来的内容,数据结构为键值对结构{key:value,key:value},在面向对象的语言中key为对象的属性,value为对应的属性值,。取值方法为 对象.key 获取属性值,这个属性值的类型可以是数字、字符串、数组、对象几种。 大括号{}用来描述一组“不同类型的无序键值对集合,即各个key之间没有什么明确的关系。
下面举例json的对象结构:
{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"} 每个属性和值之间用":"分隔 不同属性之间用","分隔
json中,对象的键名必须用双引号括起来;同一个对象中不应该出现两个同名的属性。
2、数组:在json中数组是用[ ]括起来的内容,数据结构为{ item1,item2,…,itemn} 其中,item是key-value键值对的形式,取值方法和数组一样,使用索引获取,其中属性值的类型可以是:数字,字符串,数组,对象(这里暗示了数组[ ]里面可以前台对象{ })几种。方括号[]用来描述一组“相同类型的有序数据集合”
{ "people":[ {"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"}, {"firstName":"Jason","lastName":"Hunter","email":"bbbb"}, {"firstName":"Elliotte","lastName":"Harold","email":"cccc"} ] } 数组值之间用","分隔 访问形式为:people[0].firstname 输出:Brett
这个例子中people数组包含了三个值,这些值又是json对象。
数组和对象的最后一个成员的后面不能加 “,” 。经过对象、数组这2种结构就可以组合成复杂的数据结构了。
参考网址:http://www.runoob.com/json/json-syntax.html
2、python的dict结构:
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:
dict = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'};
.Attention
1、python字典的值可以去任何对象,既可以是python的标准对象,也可以是用户自定义的对象,但是dict的键不行。
2、不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住。
3、键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行。
3、序列化(serialization)和反序列化(deserialization):
序列化:将对象的状态信息(如python的简单数据类型:list,dict,tuple,int,float,unicode)转化为可存储或者可传输的内容(如json 、xml)的过程。
反序列化:从存储文件或者存储区域(如json 、xml)读取需要反序列化的对象状态,并重建该对象。
json:(javascript object notation)一种轻量级数据交换格式,相对于xml更简单、易阅读、编写、解析和生成,json是javascript中的一个子集
python中集成了json模块:
序列化——-encoding :将一个python对象编码成json字符串(注意:这里是指json字符串,言外之意是可以将非json字符串的文件转化为json字符串,然后再反序列化)
反序列化-—decoding:将一个字符串解码成python对象
4、序列化(serialization)和反序列化(deserialization):
序列化方式:(Python对象转换成json的对照图)
对于python对象内的各个元素,python的字典会被转化为json的对象,python的list,tuple会被转化为array,以此类推。
反序列化:(json 对象转换成Python对象的对照图)
对于json字符串内的各个元素,字符串会被转成pyhon的str,对象会被转成python的dict,数组会被转化为python的list以此类推
参考网址:https://docs.python.org/3/library/json.html
5、下面来举例子吧:
dumps是将dict转化成str格式,loads是将str转化成dict格式。
dump和load也是类似的功能,只是与文件操作结合起来了。
json文件如下:
{ "dataset": { "train": { "type": "mnist", "data_set": "train", "layout_x": "tensor" }, "test": { "type": "mnist", "data_set": "test", "layout_x": "tensor" } }, "train": { "keep_model_in_mem": 0, "random_state": 0, "data_cache": { "cache_in_disk": { "default": 1 }, "keep_in_mem": { "default": 0 }, "cache_dir": "/mnt/raid/fengji/gcforest/mnist/fg-tree500-depth100-3folds/datas" } }, "outputs": ["pool1/7x7/ets", "pool1/7x7/rf", "pool1/10x10/ets", "pool1/10x10/rf", "pool1/13x13/ets", "pool1/13x13/rf"], "estimators": [ {"n_folds":3,"type":"ExtraTreesClassifier","n_estimators":500,"max_depth":100,"n_jobs":-1,"min_samples_leaf":10}, {"n_folds":3,"type":"RandomForestClassifier","n_estimators":500,"max_depth":100,"n_jobs":-1,"min_samples_leaf":10} ] }
python对象如下:
dictObject={ "dataset": { "train": { "type": "mnist", "data_set": "train", "layout_x": "tensor" }, "test": { "type": "mnist", "data_set": "test", "layout_x": "tensor" } }, "train": { "keep_model_in_mem": 0, "random_state": 0, "data_cache": { "cache_in_disk": { "default": 1 }, "keep_in_mem": { "default": 0 }, "cache_dir": "/mnt/raid/fengji/gcforest/mnist/fg-tree500-depth100-3folds/datas" } }, "outputs": ["pool1/7x7/ets", "pool1/7x7/rf", "pool1/10x10/ets", "pool1/10x10/rf", "pool1/13x13/ets", "pool1/13x13/rf"], "estimators": [ {"n_folds":3,"type":"ExtraTreesClassifier","n_estimators":500,"max_depth":100,"n_jobs":-1,"min_samples_leaf":10}, {"n_folds":3,"type":"RandomForestClassifier","n_estimators":500,"max_depth":100,"n_jobs":-1,"min_samples_leaf":10} ] }
反序列化:json——>python
# 读取json数据的代码: path="D:\PycharmProjects/untitled\jsonformat" with open(path) as f: deserialization=json.load(f) print(type(deserialization)) print(type(deserialization["train"])) print(type(deserialization["outputs"])) print(type(deserialization["estimators"])) print(type(deserialization["dataset"]["train"]["type"])) print(type(deserialization["train"]["keep_model_in_mem"])) print(type(deserialization["train"]["data_cache"])) # 对应的输出: <class 'dict'> <class 'dict'> <class 'list'> <class 'list'> <class 'str'> <class 'int'> <class 'dict'> # 与json--->python的对照图一致
序列化:python——>json
# 读取python对象的代码: serialization=json.dumps(dictObject) print(type(serialization)) print(serialization) # 输出结果: <class 'str'> {"dataset": {"train": {"type": "mnist", "layout_x": "tensor", "data_set": "train"}, "test": {"type": "mnist", "layout_x": "tensor", "data_set": "test"}}, "train": {"random_state": 0, "data_cache": {"cache_in_disk": {"default": 1}, "cache_dir": "/mnt/raid/fengji/gcforest/mnist/fg-tree500-depth100-3folds/datas", "keep_in_mem": {"default": 0}}, "keep_model_in_mem": 0}, "outputs": ["pool1/7x7/ets", "pool1/7x7/rf", "pool1/10x10/ets", "pool1/10x10/rf", "pool1/13x13/ets", "pool1/13x13/rf"], "estimators": [{"type": "ExtraTreesClassifier", "n_jobs": -1, "n_estimators": 500, "max_depth": 100, "n_folds": 3, "min_samples_leaf": 10}, {"type": "RandomForestClassifier", "n_jobs": -1, "n_estimators": 500, "max_depth": 100, "n_folds": 3, "min_samples_leaf": 10}]}
相关文章推荐
- python中xlsx,csv以及json文件的相互转化
- java方式的将java对象以及list或者map转化为json数据
- Python定义函数,模块导入以及Python主程序文件结构
- Servlet简介以及通过配置文件和注解两种方式部署Servlet
- 数据结构四:栈的两种形式LinkStack和SeqStack用线性表的实现方式,以及SeqQueue和LinkQueue的实现
- java方式的将java对象以及list或者map转化为json数据 .
- 转载:java方式的将java对象以及list或者map转化为json数据 .
- Python的自定义排序 以及两种排序方式
- python 转化object 到json 然后存入redis以及从redis读取
- libgdx的菜单配置,以及json文件的结构
- python 读取文件以及对文件的json字符串的操作
- 一个基于python写的ms sql和postgresql互相转化表结构以及操作的用例
- [Python进阶-7]文件和目录的IO操作,以及json序列化和反序列化
- python json string和dict的转化
- java方式的将java对象以及list或者map转化为json数据
- 练习2-1 编写一个程序一确定分别由signed及unsigned限定的char,short,int及long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现。通过直接计算来确定浮点类型的取值范围是一项难度很大的任务。
- 编写一个程序以确定分别由signed及unsigned限定的char、short、int及long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现
- java方式的将java对象以及list或者map转化为json数据,json转换为object或者map
- Python加载csv文件的两种方式
- Python安全开关文件的两种方式