@@ -148,7 +148,7 @@ static inline bool ToJson(rapidjson::Writer<OutputStream>& writer, std::string_v
148
148
149
149
template <is_std_string T, typename OutputStream = rapidjson::StringBuffer>
150
150
static inline bool ToJson (rapidjson::Writer<OutputStream>& writer, const T& str)
151
- requires( str.c_str())
151
+ requires requires { str.c_str (); }
152
152
{
153
153
return writer.String (str.c_str ());
154
154
}
@@ -165,8 +165,17 @@ static inline bool ToJson(rapidjson::Writer<rapidjson::StringBuffer>& writer, co
165
165
const bool start = writer.StartObject ();
166
166
for (const auto & [key, value] : map)
167
167
{
168
- if (!ToJson (writer, key) || !ToJson (writer, value))
169
- return false ;
168
+ if constexpr (std::is_arithmetic_v<Key>)
169
+ {
170
+ const std::string keyStr = std::to_string (key);
171
+ if (!ToJson (writer, keyStr) || !ToJson (writer, value))
172
+ return false ;
173
+ }
174
+ else
175
+ {
176
+ if (!ToJson (writer, key) || !ToJson (writer, value))
177
+ return false ;
178
+ }
170
179
}
171
180
const bool end = writer.EndObject ();
172
181
@@ -371,6 +380,11 @@ static inline JsonResult<void> FromJsonImpl(std::unordered_map<Key, Value>& map,
371
380
{
372
381
FromJson (key, k);
373
382
}
383
+ else if constexpr (std::is_arithmetic_v<Key>)
384
+ {
385
+ if (!String::ParseNumber (key.GetString (), k))
386
+ return PA_JSON_ERROR (" Failed to parse key as number" );
387
+ }
374
388
else
375
389
{
376
390
k = FromJson<Key>(key);
0 commit comments