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

261 篇文章 10 订阅
5 篇文章 0 订阅

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数据实例就完成了

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:在Python客户端代码中,使用了socket库和json库来实现与服务器通信。首先,创建了一个名为msg的类,并实例化了一个对象data。然后,将data对象转换为字典dataDict,并将其转换为json格式的字符串dataJson。最后,将dataJson编码为字节流并发送给服务器。在Java服务端代码中,使用了ServerSocket和Socket来接收客户端的连接,并通过InputStream读取客户端发送的数据。 引用\[2\]:在引用中提到了关于客户端发送图片的情况,但与问题无关。 引用\[3\]:在引用中提到了关于客户端将图片转换为Mat并进行Base64编码的情况,但与问题无关。 回答: 是的,socket可以传输json数据。在Python客户端代码中,使用json.dumps将数据对象转换为json格式的字符串,并通过socket发送给服务器。在Java服务端代码中,通过InputStream读取客户端发送的数据,并可以使用相应的方法解析json数据。因此,socket可以用于传输json数据。 #### 引用[.reference_title] - *1* [python用socket传输json格式数据给java](https://blog.csdn.net/weixin_46009432/article/details/125102480)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [C++实现Socket传输json封装的Mat](https://blog.csdn.net/weixin_36105296/article/details/117105193)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值