程序员都应该了解的一种数据格式之 JSON
作者 | 猪哥
责编 | maozz
{
"person": {
"name":
"pig",
"age":
"18",
"sex":
"man",
"hometown": {
"province":
"江西省",
"city":
"抚州市",
"county":
"崇仁县"
}
}
}
[
"pig",
18,
"man",
"江西省抚州市崇仁县"]
-
string: 字符串,必须要用双引号引起来。 -
number: 数值,与JavaScript的number一致,整数(不使用小数点或指数计数法)最多为 15 位,小数的最大位数是 17。 -
object: JavaScript的对象形式,{ key:value }表示方式,可嵌套。 -
array: 数组,JavaScript的Array表示方式[ value ],可嵌套。 -
true/false: 布尔类型,JavaScript的boolean类型。 -
null: 空值,JavaScript的null。
-
Ajxa异步访问数据 -
RPC远程调用 -
前后端分离后端返回的数据 -
开放API,如百度、高德等一些开放接口 -
企业间合作接口
{
"code":
1,
"msg":
"success",
"data": {
"name":
"pig",
"age":
"18",
"sex":
"man",
"hometown": {
"province":
"江西省",
"city":
"抚州市",
"county":
"崇仁县"
}
}
}
-
Python对象直接序列化会保存class信息,下次使用loads加载到内存时直接变成Python对象。 -
JSON对象序列化只保存属性数据,不保留class信息,下次使用loads加载到内存可以直接转成dict对象,当然也可以转为Person对象,但是需要写辅助方法。
-
用户输入用户名密码 -
app请求登录中心验证用户名密码 -
如果验证通过则生成一个Token,其中Token中包含: -
用户的uid、Token过期时间、过期延期时间等,然后返回给app -
app获得Token,保存在cookie中,下次请求其他服务则带上 -
其他服务获取到Token之后调用登录中心接口验证 -
验证通过则响应
-
性能好: 服务器不需要保存大量的session -
单点登录(登录一个应用,同一个企业的其他应用都可以访问): 使用JWT做一个登录中心基本搞定,很容易实现。 -
兼容性好: 支持移动设备,支持跨程序调用,Cookie 是不允许垮域访问的,而 Token 则不存在这个问题。 -
安全性好: 因为有签名,所以JWT可以防止被篡改。 更多JWT相关知识自行在网上学习,本文不过多介绍!
{
"name":
"server",
//项目名称
"version":
"0.0.0",
"private":
true,
"main":
"server.js",
//项目入口地址,即执行npm后会执行的项目
"scripts": {
"start":
"node ./bin/www"
///scripts指定了运行脚本命令的npm命令行缩写
},
"dependencies": {
"cookie-parser":
"~1.4.3",
//指定项目开发所需的模块
"debug":
"~2.6.9",
"express":
"~4.16.0",
"http-errors":
"~1.6.2",
"jade":
"~1.11.0",
"morgan":
"~1.9.0"
}
}
import json
# 1、Python的dict类型转JSON
person_dict = {
'name':
'pig',
'age':
18,
'sex':
'man',
'hometown':
'江西抚州'}
# indent参数为缩进空格数
person_dict_json = json.dumps(person_dict, indent=
4)
print(person_dict_json,
'\n')
# 2、Python的列表类型转JSON
person_list = [
'pig',
18,
'man',
'江西抚州']
person_list_json = json.dumps(person_list)
print(person_list_json,
'\n')
# 3、Python的对象类型转JSON
person_obj = Person(
'pig',
18,
'man',
'江西抚州')
# 中间的匿名函数是获得对象所有属性的字典形式
person_obj_json = json.dumps(person_obj,
default=lambda obj: obj.__dict__, indent=
4)
print(person_obj_json,
'\n')
# 4、JSON转Python的dict类型
person_json = '{
"name":
"pig",
"age": 18,
"sex":
"man",
"hometown":
"江西抚州"}'
person_json_dict = json.loads(person_json)
print(type(person_json_dict), '\n')
# 5、JSON转Python的列表类型
person_json2 = '[
"pig", 18,
"man",
"江西抚州"]'
person_json_list = json.loads(person_json2)
print(type(person_json_list), '\n')
# 6、JSON转Python的自定义对象类型
person_json = '{
"name":
"pig",
"age": 18,
"sex":
"man",
"hometown":
"江西抚州"}'
# object_hook参数是将dict对象转成自定义对象
person_json_obj = json.loads(person_json, object_hook=lambda d: Person(d['name'], d['age'], d['sex'], d['hometown']))
print(type(person_json_obj), '\n')
-
他们之间有什么区别? -
什么时候该加s什么时候不该加s?
\u6c5f\u897f\u629a\u5dde
热 文 推 荐
☞
