QxOrm 1.4.9
C++ Object Relational Mapping library
Loading...
Searching...
No Matches
QxSerializeQJson_QxCollection.h
Go to the documentation of this file.
1/****************************************************************************
2**
3** https://www.qxorm.com/
4** Copyright (C) 2013 Lionel Marty (contact@qxorm.com)
5**
6** This file is part of the QxOrm library
7**
8** This software is provided 'as-is', without any express or implied
9** warranty. In no event will the authors be held liable for any
10** damages arising from the use of this software
11**
12** Commercial Usage
13** Licensees holding valid commercial QxOrm licenses may use this file in
14** accordance with the commercial license agreement provided with the
15** Software or, alternatively, in accordance with the terms contained in
16** a written agreement between you and Lionel Marty
17**
18** GNU General Public License Usage
19** Alternatively, this file may be used under the terms of the GNU
20** General Public License version 3.0 as published by the Free Software
21** Foundation and appearing in the file 'license.gpl3.txt' included in the
22** packaging of this file. Please review the following information to
23** ensure the GNU General Public License version 3.0 requirements will be
24** met : http://www.gnu.org/copyleft/gpl.html
25**
26** If you are unsure which license is appropriate for your use, or
27** if you have questions regarding the use of this file, please contact :
28** contact@qxorm.com
29**
30****************************************************************************/
31
32#ifndef _QX_NO_JSON
33#ifndef _QX_SERIALIZE_QJSON_QX_COLLECTION_H_
34#define _QX_SERIALIZE_QJSON_QX_COLLECTION_H_
35
36#ifdef _MSC_VER
37#pragma once
38#endif
39
47#include <QtCore/qjsonvalue.h>
48#include <QtCore/qjsonobject.h>
49#include <QtCore/qjsonarray.h>
50
52
53#include <QxConvert/QxConvert.h>
55
56namespace qx {
57namespace cvt {
58namespace detail {
59
60template <typename Key, typename Value>
61struct QxConvert_ToJson< qx::QxCollection<Key, Value> >
62{
63 static inline QJsonValue toJson(const qx::QxCollection<Key, Value> & t, const QString & format)
64 {
65 QJsonArray arr; QJsonValue val;
66
67 for (long l = 0; l < t.count(); l++)
68 {
69 QJsonObject obj;
70 val = qx::cvt::to_json(t.getKeyByIndex(l), format); obj.insert("key", val);
71 val = qx::cvt::to_json(t.getByIndex(l), format); obj.insert("value", val);
72 arr.append(obj);
73 }
74
75 return QJsonValue(arr);
76 }
77};
78
79template <typename Key, typename Value>
80struct QxConvert_FromJson< qx::QxCollection<Key, Value> >
81{
82 static inline qx_bool fromJson(const QJsonValue & j, qx::QxCollection<Key, Value> & t, const QString & format)
83 {
84 t.clear();
85 if (! j.isArray()) { return qx_bool(true); }
86 QJsonArray arr = j.toArray(); QJsonValue val; QJsonObject obj;
87 t.reserve(static_cast<long>(arr.count()));
88
89 for (int i = 0; i < arr.count(); i++)
90 {
91 val = arr.at(i); if (! val.isObject()) { continue; }
92 obj = val.toObject(); Key key; Value value;
93 qx::cvt::from_json(obj.value("key"), key, format);
94 qx::cvt::from_json(obj.value("value"), value, format);
95 t.insert(key, value);
96 }
97
98 return qx_bool(true);
99 }
100};
101
102template <typename Value>
103struct QxConvert_ToJson< qx::QxCollection<QString, Value> >
104{
105 static inline QJsonValue toJson(const qx::QxCollection<QString, Value> & t, const QString & format)
106 {
107 QJsonObject obj; QJsonValue val;
108
109 for (long l = 0; l < t.count(); l++)
110 {
111 val = qx::cvt::to_json(t.getByIndex(l), format);
112 obj.insert(t.getKeyByIndex(l), val);
113 }
114
115 return QJsonValue(obj);
116 }
117};
118
119template <typename Value>
120struct QxConvert_FromJson< qx::QxCollection<QString, Value> >
121{
122 static inline qx_bool fromJson(const QJsonValue & j, qx::QxCollection<QString, Value> & t, const QString & format)
123 {
124 t.clear();
125 if (! j.isObject()) { return qx_bool(true); }
126 QJsonObject obj = j.toObject(); QJsonValue val;
127 t.reserve(static_cast<long>(obj.count()));
128
129 for (QJsonObject::const_iterator itr = obj.constBegin(); itr != obj.constEnd(); ++itr)
130 {
131 QString key = itr.key(); Value value;
132 qx::cvt::from_json(itr.value(), value, format);
133 t.insert(key, value);
134 }
135
136 return qx_bool(true);
137 }
138};
139
140template <typename Value>
141struct QxConvert_ToJson< qx::QxCollection<std::string, Value> >
142{
143 static inline QJsonValue toJson(const qx::QxCollection<std::string, Value> & t, const QString & format)
144 {
145 QJsonObject obj; QJsonValue val;
146
147 for (long l = 0; l < t.count(); l++)
148 {
149#ifndef QT_NO_STL
150 QString key = QString::fromStdString(t.getKeyByIndex(l));
151#else // QT_NO_STL
152 std::string s = t.getKeyByIndex(l);
153 QString key = QString::fromLatin1(s.data(), int(s.size()));
154#endif // QT_NO_STL
155
156 val = qx::cvt::to_json(t.getByIndex(l), format);
157 obj.insert(key, val);
158 }
159
160 return QJsonValue(obj);
161 }
162};
163
164template <typename Value>
165struct QxConvert_FromJson< qx::QxCollection<std::string, Value> >
166{
167 static inline qx_bool fromJson(const QJsonValue & j, qx::QxCollection<std::string, Value> & t, const QString & format)
168 {
169 t.clear();
170 if (! j.isObject()) { return qx_bool(true); }
171 QJsonObject obj = j.toObject(); QJsonValue val;
172 t.reserve(static_cast<long>(obj.count()));
173
174 for (QJsonObject::const_iterator itr = obj.constBegin(); itr != obj.constEnd(); ++itr)
175 {
176 QString key = itr.key(); Value value;
177 qx::cvt::from_json(itr.value(), value, format);
178
179#ifndef QT_NO_STL
180 std::string s = key.toStdString();
181#else // QT_NO_STL
182 std::string s = key.toLatin1().constData();
183#endif // QT_NO_STL
184
185 t.insert(s, value);
186 }
187
188 return qx_bool(true);
189 }
190};
191
192#if ((! defined(QT_NO_STL)) && (! defined(QT_NO_STL_WCHAR)))
193
194template <typename Value>
195struct QxConvert_ToJson< qx::QxCollection<std::wstring, Value> >
196{
197 static inline QJsonValue toJson(const qx::QxCollection<std::wstring, Value> & t, const QString & format)
198 {
199 QJsonObject obj; QJsonValue val;
200
201 for (long l = 0; l < t.count(); l++)
202 {
203 val = qx::cvt::to_json(t.getByIndex(l), format);
204 obj.insert(QString::fromStdWString(t.getKeyByIndex(l)), val);
205 }
206
207 return QJsonValue(obj);
208 }
209};
210
211template <typename Value>
212struct QxConvert_FromJson< qx::QxCollection<std::wstring, Value> >
213{
214 static inline qx_bool fromJson(const QJsonValue & j, qx::QxCollection<std::wstring, Value> & t, const QString & format)
215 {
216 t.clear();
217 if (! j.isObject()) { return qx_bool(true); }
218 QJsonObject obj = j.toObject(); QJsonValue val;
219 t.reserve(static_cast<long>(obj.count()));
220
221 for (QJsonObject::const_iterator itr = obj.constBegin(); itr != obj.constEnd(); ++itr)
222 {
223 QString key = itr.key(); Value value;
224 qx::cvt::from_json(itr.value(), value, format);
225 t.insert(key.toStdWString(), value);
226 }
227
228 return qx_bool(true);
229 }
230};
231
232#endif // ((! defined(QT_NO_STL)) && (! defined(QT_NO_STL_WCHAR)))
233
234} // namespace detail
235} // namespace cvt
236} // namespace qx
237
238#endif // _QX_SERIALIZE_QJSON_QX_COLLECTION_H_
239#endif // _QX_NO_JSON
qx::QxBool qx_bool
Definition QxBool.h:150
QxOrm thread-safe container (keep insertion order + quick access by index + quick access by key)
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
Definition QxBool.h:71
qx::QxCollection<Key, Value> : QxOrm thread-safe container (keep insertion order + quick access by in...
bool insert(const Key &key, const Value &value)
Add element 'value' at the end of the list indexed by 'key'.
const_reference_key getKeyByIndex(long index) const
Return the key associated with the element at index position 'index'.
void reserve(long size)
Request that the capacity of the allocated storage space for the items of the container be at least e...
long count() const
Return the number of items in the list (same as 'size()')
void clear()
Remove all items from the list.
const_reference_value getByIndex(long index) const
Return the item at index position 'index'.
qx_bool from_json(const QJsonValue &j, T &t, const QString &format=QString())
Definition QxConvert.h:84
QJsonValue to_json(const T &t, const QString &format=QString())
Definition QxConvert.h:83
Root namespace for all QxOrm library features.
static qx_bool fromJson(const QJsonValue &j, qx::QxCollection< Key, Value > &t, const QString &format)
static qx_bool fromJson(const QJsonValue &j, qx::QxCollection< QString, Value > &t, const QString &format)
static qx_bool fromJson(const QJsonValue &j, qx::QxCollection< std::string, Value > &t, const QString &format)
static qx_bool fromJson(const QJsonValue &j, qx::QxCollection< std::wstring, Value > &t, const QString &format)
static QJsonValue toJson(const qx::QxCollection< Key, Value > &t, const QString &format)
static QJsonValue toJson(const qx::QxCollection< QString, Value > &t, const QString &format)
static QJsonValue toJson(const qx::QxCollection< std::string, Value > &t, const QString &format)
static QJsonValue toJson(const qx::QxCollection< std::wstring, Value > &t, const QString &format)