#include <iostream>
#include <nlohmann/json.hpp>
using json = nlohmann::json;
int main()
{
json object = {{"one", 1}, {"two", 2}};
json null;
std::cout << object << '\n';
std::cout << null << '\n';
auto res1 = object.emplace("three", 3);
null.emplace("A", "a");
null.emplace("B", "b");
auto res2 = null.emplace("B", "c");
std::cout << object << '\n';
std::cout << *res1.first << " " << std::boolalpha << res1.second << '\n';
std::cout << null << '\n';
std::cout << *res2.first << " " << std::boolalpha << res2.second << '\n';
}
#include <iostream>
#include <nlohmann/json.hpp>
using json = nlohmann::json;
class ReqSelector;
typedef std::shared_ptr<ReqSelector> ReqSelectorPtr;
struct ReqSelector{
int left;
int top;
};
template<typename T, typename R>
struct JSONOperator {
void To_Json(T &t, R& r) {
}
void From_Json(T& t, R& r) {
}
};
template<typename T>
struct JSONOperator<T, ReqSelectorPtr> {
void To_Json(T& t, ReqSelectorPtr& r) {
t = json{{"left", r->left}, {"top", r->top}};
}
void From_Json(T& t, ReqSelectorPtr& r) {
t["left"].get_to(r->left);
t["top"].get_to(r->top);
}
};
template<typename T, typename Q>
void From_Json(T& t, Q& q) {
JSONOperator<T, Q>().From_Json(t, q);
}
template<typename T, typename Q>
void To_Json(T& t, Q& q) {
JSONOperator<T, Q>().To_Json(t, q);
}
int main()
{
json resArr = json::array({});
resArr.push_back({{"left",1}, {"top", 1}});
std::cout<<resArr<<std::endl;
json js = {{"left", 2}, {"top", 2}};
resArr.insert(resArr.end(), js);
std::cout<<resArr<<std::endl;
json obj = json::object({{"selector", resArr}});
std::cout<<obj<<std::endl;
std::cout<<obj.dump()<<std::endl;
std::cout<<obj["selector"]<<std::endl;
ReqSelectorPtr req = std::make_shared<ReqSelector>();
From_Json<json, ReqSelectorPtr>(obj["selector"][0], req);
std::cout<<"left:"<<req->left<<","<<"top:"<<req->top<<std::endl;
json resp;
To_Json<json, ReqSelectorPtr>(resp, req);
std::cout<<resp<<std::endl;
return 0;
}