33#ifndef _QX_SERIALIZE_QJSON_STD_UNORDERED_MAP_H_
34#define _QX_SERIALIZE_QJSON_STD_UNORDERED_MAP_H_
47#include <QtCore/qjsonvalue.h>
48#include <QtCore/qjsonobject.h>
49#include <QtCore/qjsonarray.h>
51#include <unordered_map>
60template <
typename Key,
typename Value>
63 static inline QJsonValue
toJson(
const std::unordered_map<Key, Value> & t,
const QString & format)
65 typedef typename std::unordered_map<Key, Value>::const_iterator type_itr;
66 QJsonArray arr; QJsonValue val;
68 for (type_itr itr = t.begin(); itr != t.end(); ++itr)
76 return QJsonValue(arr);
80template <
typename Key,
typename Value>
83 static inline qx_bool fromJson(
const QJsonValue & j, std::unordered_map<Key, Value> & t,
const QString & format)
86 if (! j.isArray()) {
return qx_bool(
true); }
87 QJsonArray arr = j.toArray(); QJsonValue val; QJsonObject obj;
88 t.reserve(
static_cast<typename std::unordered_map<Key, Value>::size_type
>(arr.count()));
90 for (
int i = 0; i < arr.count(); i++)
92 val = arr.at(i);
if (! val.isObject()) {
continue; }
93 obj = val.toObject(); Key key; Value value;
96 t.insert(std::make_pair(key, value));
103template <
typename Key,
typename Value>
106 static inline QJsonValue
toJson(
const std::unordered_multimap<Key, Value> & t,
const QString & format)
108 typedef typename std::unordered_multimap<Key, Value>::const_iterator type_itr;
109 QJsonArray arr; QJsonValue val;
111 for (type_itr itr = t.begin(); itr != t.end(); ++itr)
119 return QJsonValue(arr);
123template <
typename Key,
typename Value>
126 static inline qx_bool fromJson(
const QJsonValue & j, std::unordered_multimap<Key, Value> & t,
const QString & format)
129 if (! j.isArray()) {
return qx_bool(
true); }
130 QJsonArray arr = j.toArray(); QJsonValue val; QJsonObject obj;
131 t.reserve(
static_cast<typename std::unordered_multimap<Key, Value>::size_type
>(arr.count()));
133 for (
int i = 0; i < arr.count(); i++)
135 val = arr.at(i);
if (! val.isObject()) {
continue; }
136 obj = val.toObject(); Key key; Value value;
139 t.insert(std::make_pair(key, value));
146template <
typename Value>
149 static inline QJsonValue
toJson(
const std::unordered_map<QString, Value> & t,
const QString & format)
151 typedef typename std::unordered_map<QString, Value>::const_iterator type_itr;
152 QJsonObject obj; QJsonValue val;
154 for (type_itr itr = t.begin(); itr != t.end(); ++itr)
157 obj.insert(itr->first, val);
160 return QJsonValue(obj);
164template <
typename Value>
167 static inline qx_bool fromJson(
const QJsonValue & j, std::unordered_map<QString, Value> & t,
const QString & format)
170 if (! j.isObject()) {
return qx_bool(
true); }
171 QJsonObject obj = j.toObject(); QJsonValue val;
172 t.reserve(
static_cast<typename std::unordered_map<QString, Value>::size_type
>(obj.count()));
174 for (QJsonObject::const_iterator itr = obj.constBegin(); itr != obj.constEnd(); ++itr)
176 QString key = itr.key(); Value value;
178 t.insert(std::make_pair(key, value));
185template <
typename Value>
188 static inline QJsonValue
toJson(
const std::unordered_map<std::string, Value> & t,
const QString & format)
190 typedef typename std::unordered_map<std::string, Value>::const_iterator type_itr;
191 QJsonObject obj; QJsonValue val;
193 for (type_itr itr = t.begin(); itr != t.end(); ++itr)
196 QString key = QString::fromStdString(itr->first);
198 QString key = QString::fromLatin1(itr->first.data(),
int(itr->first.size()));
202 obj.insert(key, val);
205 return QJsonValue(obj);
209template <
typename Value>
212 static inline qx_bool fromJson(
const QJsonValue & j, std::unordered_map<std::string, Value> & t,
const QString & format)
215 if (! j.isObject()) {
return qx_bool(
true); }
216 QJsonObject obj = j.toObject(); QJsonValue val;
217 t.reserve(
static_cast<typename std::unordered_map<std::string, Value>::size_type
>(obj.count()));
219 for (QJsonObject::const_iterator itr = obj.constBegin(); itr != obj.constEnd(); ++itr)
221 QString key = itr.key(); Value value;
225 std::string s = key.toStdString();
227 std::string s = key.toLatin1().constData();
230 t.insert(std::make_pair(s, value));
237#if ((! defined(QT_NO_STL)) && (! defined(QT_NO_STL_WCHAR)))
239template <
typename Value>
242 static inline QJsonValue
toJson(
const std::unordered_map<std::wstring, Value> & t,
const QString & format)
244 typedef typename std::unordered_map<std::wstring, Value>::const_iterator type_itr;
245 QJsonObject obj; QJsonValue val;
247 for (type_itr itr = t.begin(); itr != t.end(); ++itr)
250 obj.insert(QString::fromStdWString(itr->first), val);
253 return QJsonValue(obj);
257template <
typename Value>
260 static inline qx_bool fromJson(
const QJsonValue & j, std::unordered_map<std::wstring, Value> & t,
const QString & format)
263 if (! j.isObject()) {
return qx_bool(
true); }
264 QJsonObject obj = j.toObject(); QJsonValue val;
265 t.reserve(
static_cast<typename std::unordered_map<std::wstring, Value>::size_type
>(obj.count()));
267 for (QJsonObject::const_iterator itr = obj.constBegin(); itr != obj.constEnd(); ++itr)
269 QString key = itr.key(); Value value;
271 t.insert(std::make_pair(key.toStdWString(), value));
qx::cvt : namespace to provide global functions to convert any kind of objects to/from QString and QV...
qx_bool : boolean type with code and description message when an error occured
qx_bool from_json(const QJsonValue &j, T &t, const QString &format=QString())
QJsonValue to_json(const T &t, const QString &format=QString())
Root namespace for all QxOrm library features.
static qx_bool fromJson(const QJsonValue &j, std::unordered_map< Key, Value > &t, const QString &format)
static qx_bool fromJson(const QJsonValue &j, std::unordered_map< QString, Value > &t, const QString &format)
static qx_bool fromJson(const QJsonValue &j, std::unordered_map< std::string, Value > &t, const QString &format)
static qx_bool fromJson(const QJsonValue &j, std::unordered_map< std::wstring, Value > &t, const QString &format)
static qx_bool fromJson(const QJsonValue &j, std::unordered_multimap< Key, Value > &t, const QString &format)
static QJsonValue toJson(const std::unordered_map< Key, Value > &t, const QString &format)
static QJsonValue toJson(const std::unordered_map< QString, Value > &t, const QString &format)
static QJsonValue toJson(const std::unordered_map< std::string, Value > &t, const QString &format)
static QJsonValue toJson(const std::unordered_map< std::wstring, Value > &t, const QString &format)
static QJsonValue toJson(const std::unordered_multimap< Key, Value > &t, const QString &format)