Tianchi  v0.0.1 build 20130425
C++ library for Qt with VC & mingW
Json.h
浏览该文件的文档.
1 // ********************************************************************************************************************
2 // Tianchi C++ library for Qt (open source)
3 // 天池共享源码库
4 // 版权所有 (C) 天池共享源码库开发组
5 // 授权协议:请阅读天池共享源码库附带的授权协议
6 // ********************************************************************************************************************
7 // 文档说明:JSON 创建和解析类
8 // ====================================================================================================================
9 // 开发日志:
10 // 日期 人员 说明
11 // --------------------------------------------------------------------------------------------------------------------
12 // 2013.04.10 圣域天子 建立
13 //
14 // ====================================================================================================================
16 #ifndef TIANCHI_JSON_H
17 #define TIANCHI_JSON_H
18 
19 #include "Global.h"
20 
21 #include <QDateTime>
22 #include <QMap>
23 #include <QList>
24 #include <QVariant>
25 #include <QString>
26 #include <QStringList>
27 
28 TIANCHI_BEGIN_NAMESPACE
29 
33 class TIANCHI_API JSONObject
34 {
35 public:
36  enum ValueTypeFlag
37  {
38  vtfObject = 0,
39  vtfString = 1,
40  vtfInt = 2,
41  vtfDouble = 3,
42  vtfBool = 4, vtfDateTime=5, vtfNull=6, vtfArray=99 };
43 
44  JSONObject(const QString& key="");
45  virtual ~JSONObject();
46 
47  static QString quote(const QString& Text);
48  static QString dequote(const QString& S);
49 
50 protected:
51  JSONObject* parent;
52 
53  int m_index;
54  QMap<QString, JSONObject*> m_list;
55 
56  ValueTypeFlag m_type;
57  QString m_key;
58  QVariant m_value;
59 
60  QString jsonKey() const;
61  QString jsonValue() const;
62 
63  void init();
64  const wchar_t* fromObject(const QString& Key, const wchar_t* ptr);
65  const wchar_t* fromArray(const wchar_t* ptr);
66 
67  inline QString newKey(const QString& key)
68  { return key.trimmed().isEmpty() ? QString::number(m_index++) : key.trimmed(); }
69 
70  const wchar_t* parseKey(QString& Value, const wchar_t* ptr);
71  const wchar_t* parseValue(QString Key, const wchar_t* ptr);
72  const wchar_t* parseNumber(QString& Value, const wchar_t* ptr);
73  static inline const wchar_t* skip(const wchar_t* in)
74  {
75  while(in && *in && *in<=32)
76  {
77  in++;
78  }
79  return in;
80  }
81 
82 public:
83  int type() const { return m_type; }
84  void setType(int value) { m_type = (ValueTypeFlag) value; }
85 
86  QString key() const;
87  void setKey(const QString& value);
88  QVariant value() const;
89  inline QVariant value(const QString& key) const
90  { QVariant ret; value(key, ret); return ret; }
91  bool value(const QString& key, QVariant& v) const;
92  inline bool exists(const QString& key) const
93  {
94  QMap<QString, JSONObject*>::const_iterator child = m_list.find(key);
95  return child != m_list.constEnd() && child.key() == key;
96  }
97  inline int count() const { return m_list.count(); }
98  inline JSONObject* get(const QString& key) const
99  { return m_list[key]; }
100  QList<JSONObject*> children() const;
101 
102 
103  JSONObject* addObject(const QString& key="");
104  JSONObject* addArray(const QString& key);
105  JSONObject* addNull(const QString& key);
106  inline JSONObject* add(const QString& key, const char* value) { return add(key, QString(value)); }
107  JSONObject* add(const QString& key, const QString& value);
108  JSONObject* add(const QString& key, int value);
109  JSONObject* add(const QString& key, double value);
110  JSONObject* add(const QString& key, bool value);
111  JSONObject* add(const QString& key, QDateTime value);
112 
113  JSONObject* addNull();
114  inline JSONObject* add(const char* value) { return add(QString(value)); }
115  inline JSONObject* add(const QString& value) { return add(QString::number(m_index++), value); }
116  inline JSONObject* add(int value) { return add(QString::number(m_index++), value); }
117  inline JSONObject* add(double value) { return add(QString::number(m_index++), value); }
118  inline JSONObject* add(bool value) { return add(QString::number(m_index++), value); }
119  inline JSONObject* add(QDateTime value) { return add(QString::number(m_index++), value); }
120 
121  void deleteChildren(const QString& key);
122  void clearChildren();
123  void clear();
124 
125  virtual QString toString() const; // 取得
126 
127  bool fromString(QString jsonText);
128 };
129 // =====================================================================================================================
130 
131 TIANCHI_END_NAMESPACE
132 
133 #endif // TIANCHI_JSON_H