ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c++ http服务器客户端程序-传输json解析json数据(2)

2021-04-24 10:31:59  阅读:482  来源: 互联网

标签:http name res writer json 客户端程序 using include svr


1、服务器端的实例:

#include "stdafx.h"

#include <iostream>

#include <chrono>
#include <cstdio>
#include "httplib.h"

using namespace httplib;


#include "rapidjson.h"
#include "prettywriter.h" // for stringify JSON
#include "document.h"
using namespace std;

string ArrayToJson()
{
    using namespace rapidjson;
    StringBuffer sb;
    PrettyWriter<StringBuffer> writer(sb);

    writer.StartArray();

    writer.StartObject();
    writer.Key("name");
    writer.String("xiaoming");
    writer.EndObject();

    writer.StartObject();
    writer.Key("name");
    writer.String("xiaohua");
    writer.EndObject();

    writer.EndArray();

    return sb.GetString();
}

int main()
{
    string strJson = ArrayToJson();
    ParseArray(strJson);

    Server svr;
    if (!svr.is_valid())
    {
        printf("server has an error...\n");
        return -1;
    }

    svr.Get("/hi", [&](const Request& /*req*/, Response& res)
    {
        res.set_content(strJson, "text/plain");
    });

    svr.Get("/stop",
        [&](const Request& /*req*/, Response& /*res*/) { svr.stop(); });

    svr.listen("localhost", 1234);
    int yy = 55;

}

生成的json的数据如下:

[
    {
        "name": "xiaoming"
    },
    {
        "name": "xiaohua"
    }
]

2、客户端连接服务器端实例如下:

#include "stdafx.h"

#include <iostream>
#include "httplib.h"
#include <iostream>

using namespace std;

#include "rapidjson.h"
#include "prettywriter.h" // for stringify JSON
#include "document.h"
using namespace std;

void ParseArray(string strJson)
{
    //创建解析对象
    rapidjson::Document doc;
    //首先进行解析,没有解析错误才能进行具体字段的解析
    if (!doc.Parse(strJson.data()).HasParseError())
    {
        const rapidjson::Value& docArray = doc.GetArray();
        for (int i = 0; i < docArray.Size(); ++i)
        {
            string strValue = docArray[i]["name"].GetString();
        }
    }
}

int main()
{
    httplib::Client cli("localhost", 1234);
    if (auto res = cli.Get("/hi"))
    {
        cout << res->status << endl;
        cout << res->get_header_value("Content-Type") << endl;
        cout << res->body << endl;

        //解析当前的json
        ParseArray(res->body);
    }
    else
    {
        
    }
    system("pause");
}

至此,一个简单的http服务器端客户端通信传输json数据实例就完成了

标签:http,name,res,writer,json,客户端程序,using,include,svr
来源: https://blog.csdn.net/u011269801/article/details/116082734

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有