-
Notifications
You must be signed in to change notification settings - Fork 0
/
json.h
128 lines (105 loc) · 3.22 KB
/
json.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#ifndef JSON_H
#define JSON_H
#include <QtScript/QtScript>
#include <QVariant>
#include <QMap>
#include <QList>
#include "jsonindex.h"
class Json;
typedef QMap<QString,Json> JsonObject;
typedef QList<Json> JsonArray;
class Json
{
public:
enum Type
{
Null,
Object,
Array,
String,
Number,
Bool
};
enum InputFormat
{
InputPlain,
InputEncoded
};
enum EncodeMode
{
EncodeStandard,
EncodeDump
};
enum Error
{
ErrorNone,
ErrorTypeMismatch,
ErrorParsing
};
explicit Json();
Json(const JsonObject &object);
Json(const JsonArray &array);
Json(const QString &string, enum InputFormat format = InputPlain);
Json(const QByteArray &data, enum InputFormat format = InputPlain);
Json(const char *string, enum InputFormat format = InputPlain);
Json(const int val);
Json(const double val);
Json(const bool val);
Json(const Json &json);
Json(const QVariant &elem);
Json(const QVariantMap &object);
Json(const QVariantList &array);
~Json();
inline void setValue() { setNull(); }
void parse(const QString &jString);
void parse(const QByteArray &jData);
void parse(const char *jString);
QString encode(enum EncodeMode mode = EncodeStandard) const;
inline QString dump() const { return encode(EncodeDump); }
inline enum Type type() const { return m_type; }
inline enum Error error() const { return m_error; }
inline bool isNull() const { return m_type == Null; }
inline bool isObject() const { return m_type == Object; }
inline bool isArray() const { return m_type == Array; }
inline bool isString() const { return m_type == String; }
inline bool isNumber() const { return m_type == Number; }
inline bool isBool() const { return m_type == Bool; }
const JsonObject &toObject(const Json &def = Json()) const;
const JsonArray &toArray(const Json &def = Json()) const;
QString toString(const Json &def = Json()) const;
double toNumber(const Json &def = Json()) const;
bool toBool(const Json &def = Json()) const;
int toInt(const Json &def = Json()) const;
JsonObject &toObject(const Json &def = Json());
JsonArray &toArray(const Json &def = Json());
bool contains(const JsonIndex &idx) const;
const Json &operator[](const JsonIndex &idx) const;
Json &operator[](const JsonIndex &idx);
Json &operator=(const Json &val);
static QString escape(const QString &str, enum EncodeMode mode = EncodeDump);
static QString unescape(const QString &str);
protected:
enum Type m_type;
void setValue(const JsonObject &val);
void setValue(const JsonArray &val);
void setValue(const QString &val);
void setValue(const QByteArray &val);
void setValue(const char *val);
void setValue(const int val);
void setValue(const double val);
void setValue(const bool val);
void setValue(const Json &val);
void setValue(const QVariant &val);
void setValue(const QVariantMap &val);
void setValue(const QVariantList &val);
void setValue(const QStringList &val);
QString encodeObject(enum EncodeMode mode) const;
QString encodeArray(enum EncodeMode mode) const;
private:
void *m_data;
mutable enum Error m_error;
void setNull();
Json parse(const QScriptValue &sv);
};
Q_DECLARE_METATYPE(Json)
#endif // JSON_H