diff --git a/Easy2D/common/Json.h b/Easy2D/common/Json.h index 385f44f3..fa77bd20 100644 --- a/Easy2D/common/Json.h +++ b/Easy2D/common/Json.h @@ -1907,7 +1907,7 @@ namespace easy2d { } - basic_json(initializer_list init_list) + basic_json(initializer_list const& init_list) { bool is_an_object = std::all_of(init_list.begin(), init_list.end(), [](const basic_json& json) { @@ -1934,6 +1934,32 @@ namespace easy2d } } + static inline basic_json object(initializer_list const& init_list) + { + if (init_list.size() != 2 || !(*init_list.begin()).is_string()) + { + throw json_type_error("cannot create object from initializer_list"); + } + + basic_json json; + json.value_ = JsonType::Object; + json.value_.data.object->emplace(*((*init_list.begin()).value_.data.string), *(init_list.begin() + 1)); + return json; + } + + static inline basic_json array(initializer_list const& init_list) + { + basic_json json; + json.value_ = JsonType::Array; + + if (init_list.size()) + { + json.value_.data.vector->reserve(init_list.size()); + json.value_.data.vector->assign(init_list.begin(), init_list.end()); + } + return json; + } + inline bool is_object() const { return value_.type == JsonType::Object; } inline bool is_array() const { return value_.type == JsonType::Array; } diff --git a/samples/Samples/Demo5.h b/samples/Samples/Demo5.h index e5cc03f8..732d986a 100644 --- a/samples/Samples/Demo5.h +++ b/samples/Samples/Demo5.h @@ -87,12 +87,12 @@ public: // 创建 JSON 格式的 POST 数据 Json request_data = { - {"string", "test中文"}, - {"boolean", true}, - {"integer", 12}, - {"float", 3.125}, - {"array", {1, 2, 3, 4, 4.5 }}, - {"object", {"key", "value"}}, + { "string", "test中文" }, + { "boolean", true }, + { "integer", 12 }, + { "float", 3.125 }, + { "array", { 1, 2, 3, 4, 4.5 } }, + { "object", { "key", "value" } }, }; HttpRequestPtr request = new HttpRequest; @@ -111,9 +111,7 @@ public: Logger::Instance().Println(L"Start to send PUT request..."); // 创建 JSON 格式的 PUT 数据 - Json request_data = { - {"user", {{"id", 1}, {"phone", "12345678"}}}, - }; + Json request_data = Json::array({ 1, 2, 3 }); HttpRequestPtr request = new HttpRequest; request->SetUrl(L"http://httpbin.org/put");