对于 cpprestsdk 库的高级用法,特别是在将 JSON 转换为对象时,你可以使用该库提供的功能来简化这一过程。cpprestsdk 是一个 C++ 的跨平台库,用于处理 HTTP 请求和响应,同时也提供了 JSON 数据的处理功能。
一、代码示例
1、客户端
#include <cpprest/http_client.h>
#include <cpprest/filestream.h>
#include <cpprest/json.h>
using namespace std;
using namespace utility;
using namespace web;
using namespace web::http;
using namespace web::http::client;
using namespace concurrency::streams;
int main()
{
http_client client(U("http://127.0.0.1:5000/"));
uri_builder builder(U("/users")); // 指定请求的路径为/users
// 发送 GET 请求
http_request request(methods::GET);
request.set_request_uri(builder.to_string()); // 设置请求的URI为构建的URL
request.headers().add(U("Accept"), U("application/json"));
// 获取响应
http_response response = client.request(request).get();
// Check the status code.
if (response.status_code() != 200)
{
throw std::runtime_error("Returned " + std::to_string(response.status_code()));
}
// Read the response body as a string.
auto response_body = response.extract_string().get();
// Output the response body for debugging.
std::cout << "Response Body: " << response_body << std::endl;
// Parse the response body as a JSON array.
json::value jsonArray;
try {
jsonArray = json::value::parse(response_body);
} catch (const web::json::json_exception& e) {
std::cerr << "Failed to parse JSON: " << e.what() << std::endl;
}
auto name1=jsonArray.as_array()[0][U("name")].as_string();
cout<<"jsonArray.as_array()[0]=="<<name1<<endl;
// Now you can iterate over the JSON array:
for (auto &user : jsonArray.as_array())
{
auto name = user[U("name")].as_string();
auto age = user[U("age")].as_integer();
cout << "name=" << name << ", age=" << age << endl;
}
return 0;
}
2、服务端:
from flask import Flask, jsonify, request
app = Flask(__name__)
# 获取所有用户的列表
@app.route('/users', methods=['GET'])
def get_users():
# 返回所有用户的列表
return jsonify(users)
# 获取特定用户的详细信息
@app.route('/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
# 返回特定用户的详细信息
return jsonify(user)
# 创建一个新用户
@app.route('/users', methods=['POST'])
def create_user():
new_user = request.json
# 创建新用户并返回成功状态码
return jsonify({'message': 'User created successfully'}), 201
# 更新特定用户的信息
@app.route('/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
updated_user = request.json
# 更新特定用户的信息并返回成功状态码
return jsonify({'message': 'User updated successfully'}), 200
# 删除特定用户
@app.route('/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
# 删除特定用户并返回成功状态码
return jsonify({'message': 'User deleted successfully'}), 200
if __name__ == '__main__':
# 初始化用户数据
users = [
{'id': 1, 'name': '张三', 'age': 20},
{'id': 2, 'name': '李四', 'age': 25},
{'id': 3, 'name': '王五', 'age': 30}
]
app.run(debug=True)