如何解决C ++到JSON序列化的问题?

时间:2019-12-30 07:34:47

标签: c++ json serialization postman

我正在使用C ++ REST API,并且对象有问题。我使用邮差与我的应用程序进行通信。我在cpp中有一个结构:

struct Item
{
    int id;
    int state; //0,1,2
    std::string title;
    std::string description;
    std::string owner;
};

当我仅向对象添加一项(无论是哪一项)时,get方法总是正确地将其返回。

例如

在邮递员PUT方法中:

{
    "title": "Test item"
}

和GET返回:

{
    "Items": [
        {
            "Title": "Test item"
        }
    ]
}

但是当我在PUT中使用时:

{
    "id":0,
    "title": "Test item",
    "description": "I test this app",
    "owner": "me",
    "state": 0
}

或多个结构元素,GET返回:

{
    "Items": []
}

如何解决此错误?我在做什么错了?

下面,我将cpp函数附加到处理PUT和GET方法。

PUT功能:

void Service::handlePut(http_request message) {
    message.extract_json().then([=](pplx::task<json::value> task)
                                {
                                    try
                                    {
                                        Item item;
                                        json::value val = task.get();
                                        item.id = val[U("id")].as_number().to_int32();
                                        item.title = val[U("title")].as_string();
                                        item.description = val[U("description")].as_string();
                                        item.owner = val[U("owner")].as_string();
                                        item.state = val[U("state")].as_number().to_int32();
                                        items.push_back(item);
                                        message.reply(status_codes::OK);
                                    }
                                    catch(std::exception& e) {
                                        message.reply(status_codes::BadRequest);
                                    }
                                });
}

GET函数:

void Service::handleGet(http_request message) {
        vector<string> path = requestPath(message);
        if(path.empty()) {

            vector <json::value> jsonItems;
            for(auto const& it: items)
            {
                json::value element;
                element["ID"] = json::value::number(it.id);
                element["Title"] = json::value::string(it.title);
                element["Description"] = json::value::string(it.description);
                element["Owner"] = json::value::string(it.owner);
                element["State"] = json::value::number(it.state);
                jsonItems.push_back(element);
            }

            json::value generatedItems;
            generatedItems["Items"] =  json::value::array(jsonItems);
            message.reply(status_codes::OK,generatedItems);

        }
        else {
          if(path[0]=="something"){}
            else {
                message.reply(status_codes::BadRequest);
            }
        }
    }

0 个答案:

没有答案