json语法规则(PS:json键值对一定要用双引号包裹起来)

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 大括号保存对象
  • 中括号保存数组
    本文内容:

    1.Python的json规则
    2.js中的json规则
    3.Python一般脚本文件编写规则

1.Python的json规则

python程序中的json有一点点区别于JavaScript中的json,它是通过对象和数组的组合来表示数据

1.1 对象型数组

      它在JavaScript是使用花括号{}包裹起来的内容,数据结构为{key1:value1,key2:value2…}的键值对结构,key为对象的属性,value为对应的值。键名可以使用整数和字符串来表示,
所以,一个json对象跨用写作如下格式(对象型数组)

1
2
3
4
5
6
7
8
9
[{
"name": "chd",
"age": 18,
"sex": "man"
},{
"name": "Monica",
"gender": "woman",
"birthday": "1997-1-25"
}]

调用方式:通过中括号加0索引,可以得到第一个字典元素,然后调用其键名即可得到相应的键值

      调用方式一:中括号加键名
data[index][“键名”] => data[0][‘name’],结果为‘chd’
      调用方式二:get()方法传入键名,如果键名不存在,不会报错,会返回none(python中推荐使用)
data[index].get(‘键名’) => data[1].get(“birthday”),结果为”1997-1-25”

1.2 键值对形式(类似于字典)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"code": 1,
"msg": "success",
"data": {
"name": "pig",
"age": "18",
"sex": "man",
"hometown": {
"province": "江西省",
"city": "抚州市",
"county": "崇仁县"
}
}
}

1.3 需要注意到点

JSON的键名和字符串都必须使用双引号引起来,而Python中单引号也可以表示为字符串,所以这是个比较容易犯的错误!
Python类型与JSON相互转换的时候到底是用load//dump还是用loads\dumps?
他们之间有什么区别?什么时候该加s什么时候不该加s?
这个我们可以通过查看源码找到答案:
不加s的方法入参多了一个fp表示filepath,最后多了一个写入文件的操作。

加s表示转成字符串(str),不加s表示转成文件。

  • loads、dumps读写json
1
2
3
4
5
6
7
8
9
10
11
12
import json
with open("./info.json", "r", encoding="utf-8") as f:
data = json.load(f)
print(type(data)) # dict
print(data)

params = {
"name": "chd",
"gender": "man"
}
with open("./info.json", "w", encoding="utf-8") as f:
json.dump(params, f)
  • loads、dumps读写json(习惯此种方法)
1
2
3
4
5
6
7
8
9
10
11
12
13
import json
with open("./info.json", "r", encoding="utf-8") as f:
data = json.loads(f.read())
print(data)
print(type(data))

params = {
"name": "chd",
"gender": "man",
"school": "清华大学"
}
with open("./info.json", "w", encoding="utf-8") as f:
f.write(json.dumps(params, ensure_ascii=False, indent=2)) # indent表示缩进个数

2.javascript中的json

javascript的访问方式与python大同小异,但也有细分之处
访问方式一:变量名[“键名”]
访问方式二:变量名.键名

json是js的原生内容,也就意味着js可以直接读取出json对象中的数据

1
2
3
4
5
6
7
8
9
10
11
let stu = {
//stu 对象包含student的key,值为一个数组
"student":[//数组的每一个值为一个具体的学生对象
{"name": "Tom", "Grade":1, "age":11, "gender": "M"},
{"name": "Bob", "Grade":1, "age":10, "gender": "W"}
],
"classroom": {"class1": "room1", "class2": "room2"}
};

console.log(stu["classroom"]["class1"]); // room1
console.log(stu.classroom.class1); // room1

json.parse():是从一个字符串中解析出 json 对象

1
2
3
4
5
6
7
8
//定义一个字符串
let data='{"name":"chd"}';
let a = JSON.parse(data);
console.log(typeof(a)) // 对象类型
/*结果是:
*Object
* {name:"chd"}
*/

json.stringify() 是从一个对象中解析出字符串

1
2
3
4
5
6
7
8
9
let data={name:'chd'};

let a = JSON.stringify(data);
typeof(a) // 对象类型
/*
* 结果是:
* '{"name":"chd"}'
* 字符串类型
* */

3.Python一般脚本文件编写流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1.文件配置一般在config.json中,比如:用户名,账号,密码,人员信息等等
2.在settings.py 文件中导入.json文件中的配置
# 载入配置文件
BASE_DIR = os.path.dirname(os.path.abspath(__file__)) # 返回当前path文件的上一级目录
with open(os.path.join(BASE_DIR,"settings.json"),"r") as f:
SETTINGS = json.load(f)

# 配置文件的内容获取
SERVER = SETTINGS["DB_CONFIG"]["DB_SERVER"]
# json格式新的调用方法:json.load(f)的变量名["对象名"]["键名"]

3.在主文件.py 中导入文件import settings
文本格式内容为:settings.SERVER,settings.PASSWORD等等

脚本目录:
|
|--core.py
|
|--settings.py
|
|--config.json
|
|--a.py
|--b.py
|
|--.gitignore

参考文章


 评论

联系我 | Contact with me

Copyright © 2019-2020 谁知你知我,我知你知深。此恨经年深,比情度日久

博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议