微信投票网站制作,百度网站与推广,做外贸生意在哪个网站,做微信推送封面的网站JSON 全称为#xff1a; JavaScript Object Notation 也就是 javaScript 对象标记#xff0c;通过对象和数组的组合来表示数据#xff0c; 虽然构造简洁#xff0c;但是结构化程度非常高#xff0c; 是一种轻量级的数据交换格式
对象和数组
在 JavaScript 语言中#…JSON 全称为 JavaScript Object Notation 也就是 javaScript 对象标记通过对象和数组的组合来表示数据 虽然构造简洁但是结构化程度非常高 是一种轻量级的数据交换格式
对象和数组
在 JavaScript 语言中 一切皆为对象因此任何支持的数据类型都可以通过 JSON 表示 例如字符串数字对象数组等。 其中对象和数组是比较特殊且常用的类型
对象在 JavaScript 中是指用花括号 {} 包裹起来的内容 数据结构是 {key1: value1, key2: value2,......}这种键值对结构。在面向对象语言中 key 表示对象属性 value 表示属性对应的值 前者可以使用整数和字符串表示。 后者可以是任意类型
数组在 JavaScript 中是指用 方括号 [ ] 包裹起来的内容 数据结构式 [java, javascript, vb,.....]这种索引结构。 在 JavaScript 中 数组是一种比较特殊的数据类型 因为它可以像对象那样使用键值对结构 但还是索引结构用的比较多。 同样它可以是任意类型
JSON 结构类型 [{ name: Bob, gender: male, birthday: 1992-10-18 }, { name: Selina, gender: female, birthday: 1995-10-18 }] 由 [ ] 包围的内容相当于数组 数组中的每个元素都可以是任意类型 这个实例中的元素是对象 由 { } 包裹
JSON 可以由以两种形式自由组合而成 能够嵌套无限次 并且结构清晰 是数据交换的极佳实现方式
读取 JSON
Python 为我们提供了简单易用的 JSON 库 用来实现 JSON 文件的读写操作 我们可以调用 JSON 库中的 loads 方法将 JSON 文本字符串转为 JSON 对象。 实际上 JSON 对象就是 Python 中列表和字典的嵌套组合。 反过来我们可以通过 dumps 方法将 JSON 对象转为文本字符串 import json str [{ name: Bob, gender: male, birthday: 1992-10-18 }, { name: Selina, gender: female, birthday: 1995-10-18 }] print(type(str)) data json.loads(str) print(data) print(type(data)) class str
[{name: Bob, gender: male, birthday: 1992-10-18}, {name: Selina, gender: female, birthday: 1995-10-18}]
class list 这里使用 loads 方法将字符串转为了 JSON 对象。 由于最外层是中括号所以最终的数据类型是列表类型这样我们就可以用索引获取内容了。 data[0][name] data[0].get(name) Bob以中括号加 0 作为索引 可以得到第一个字典元素 在调用其键名即可以得到相应的键值。获取键值的方式有两种一种是括号加键名 另一种是利用 get 方法传入键名。 这里推荐使用 get 方法这样即使键名不存在也不会报错而是放回 None 。而且 get 方法也可以传入第二个参数(即默认值) print(data[0].get(age)) data[0].get(age, 25) None
25 这里尝试获取年龄 age, 原字典中并不存在该键名 因此会默认返回 None 此时如果传入了第二个参数 就返回传入的值
值得注意的是 JSON 的数据需要用双引号包围起来 而不能使用单引号。 import json data [{ name: Bob, gender: male, birthday: 1992-10-18 }] data1 json.loads(str) print(data1) 这里教程里说的是会报错但是我这里实际运行并没有报错而是正确运行了不过双引号还是要注意一下的 [{name: Bob, gender: male, birthday: 1992-10-18}, {name: Selina, gender: female, birthday: 1995-10-18}] 读取 json 文本文件 import json with open(data.json, encodingutf-8) as file: str file.read() data json.loads(str) print(data) 这里首先需要你有一个 data.json 的文本文件其内容是刚刚定义的字符串。
首先使用 open 方法读取文本文件 使用的是默认的读模式 编码指定为 utf-8 , 并将文件操作对象赋值为 file 然后我们调用 file 对象的 read 方法读取了文本中的所有内容 赋值为 str , 接着再调用 Loads 方法解析 JSON 字符串 将其转换为 JSON 对象
简单写法 import json data json.load(open(data.json, encodingutf-8)) print(data) 注意这里使用的是 load 方法 而不是 loads 方法。 前者的参数是一个文件操作对象 后者的参数是一个 JSON 字符串
这两种写法的结果完全一样 只不过 load 方法是将整个文件中的内容转化为 JSON 对象 而 loads 方法 可以更灵活的控制转化哪些内容。
输出 JSON
可以调用 dumps 方法将 JSON 对象转化为字符串。 import json data [{ name: Bob, gender: male, birthday: 1992-10-18 }] with open(data.json, w, encodingutf-8) as file: file.write(json.dumps(data)) 这里利用 dumps 方法 将 JSON 对象转为字符串 然后调用文件的 write 方法将字符串写入文本
另外如果想保存 JSON 对象的缩进格式可以再往 dumps 方法中添加一个参数 indent 代表缩进字符的个数 with open(data.json, w) as file: file.write(json.dumps(data,indent2)) 感觉并没有什么变化
那么如果存在中文会怎么样 import json data [{ name: 王伟 , gender: 男 , birthday: 1992-10-18 }] with open(data.json, w, encodingutf-8) as file: file.write(json.dumps(data, indent2)) 我的显示正常 教程说是会有问题会显示 Unicode 字符
解决方法 with open(data.json, w, encodingutf-8) as file: file.write(json.dumps(data, indent2, ensure_asciiFalse)) 在 json.dumps 中添加一个 ensure_asciiFalse
类比 loads 和 load 方法 , dumps 和 dump 也有简写方法 json.dump(data, open(data.json, w, encodingutf-8), indent2, ensure_asciiFalse) 这里第一个参数传入 JSON 对象 第二个参数可以传入文件操作对象其他保持不变运行结果一样