JSON概念
JSON用于不同语言之间的数据交换
JSON本质上是一个具有下面形式的字符串
观察JSON数据的两种组织格式,我们看出,跟python 中的“字典”和“字典列表”两个概念其实很接近;区别就是JSON的格式是字符串,Python中分别是dict和list。
JSON数据转换为python的数据后,类型也顺其自然变成了 Python中分别是dict和list。接下来就可以在python中处理了。
python数据和JSON数据的相互转换方法
python数据和JSON数据的相互转换-代码举例:
"""
演示JSON数据和Python字典的相互转换
"""
import json
# 准备列表,列表内每一个元素都是python的字典,将其转换为JSON
data = [{"name": "张大山", "age": 11}, {"name": "王大锤", "age": 13}, {"name": "赵小虎", "age": 16}]
json_str = json.dumps(data, ensure_ascii=False)
print(type(json_str))
print(json_str)
# 准备字典,将字典转换为JSON
d = {"name":"周杰轮", "addr":"台北"}
json_str = json.dumps(d, ensure_ascii=False)
print(type(json_str))
print(json_str)
# 将JSON字符串转换为Python数据类型[{k: v, k: v}, {k: v, k: v}]
s = '[{"name": "张大山", "age": 11}, {"name": "王大锤", "age": 13}, {"name": "赵小虎", "age": 16}]'
l = json.loads(s)
print(type(l))
print(l)
# 将JSON字符串转换为Python数据类型{k: v, k: v}
s = '{"name": "周杰轮", "addr": "台北"}'
d = json.loads(s)
print(type(d))
print(d)
JSON最常用的场景案例-前后端的数据传输
以下是前端页面和后端C/C++代码之间传输JSON数据的示例:
前端页面代码(使用jQuery):
```javascript $.ajax({ url: '/api/data', type: 'POST', data: JSON.stringify({key1: 'value1', key2: 'value2'}), contentType: 'application/json; charset=utf-8', dataType: 'json', success: function(data) { console.log(data); }, error: function(xhr, status, error) { console.log(error); } }); ```
后端C++代码(使用Drogon框架):
```c++ void MyController::getData(const HttpRequestPtr& req, std::function<void (const HttpResponsePtr&)>&& callback, const std::string& key1, const std::string& key2) { Json::Value json; json["key1"] = key1; json["key2"] = key2; auto resp = HttpResponse::newHttpJsonResponse(json); callback(resp); } ```
在这个例子中,前端页面使用jQuery的ajax方法向后端发送POST请求,请求的数据是一个JSON对象。后端使用Drogon框架处理请求,将JSON对象转换为JSON字符串并返回给前端。在后端代码中,我们使用了JsonCpp库来处理JSON数据。