Tianchi  v0.0.2 build 20130701
C++ library for Qt with VC & mingW
tcjson.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_TCJSON_H
17 #define TIANCHI_TCJSON_H
18 
19 #include <tianchi/tcglobal.h>
20 
21 #include <QDateTime>
22 #include <QMap>
23 #include <QList>
24 #include <QVariant>
25 #include <QString>
26 #include <QStringList>
27 
31 class TIANCHI_API TcJSONObject
32 {
33 public:
34  enum ValueTypeFlag
35  {
36  vtfObject = 0,
37  vtfString = 1,
38  vtfInt = 2,
39  vtfDouble = 3,
40  vtfBool = 4, vtfDateTime=5, vtfNull=6, vtfArray=99 };
41 
42  TcJSONObject(const QString& key="");
43  virtual ~TcJSONObject();
44 
45  static QString quote(const QString& Text);
46  static QString dequote(const QString& S);
47 
48 protected:
49  TcJSONObject* parent;
50 
51  int m_index;
52  QMap<QString, TcJSONObject*> m_list;
53 
54  ValueTypeFlag m_type;
55  QString m_key;
56  QVariant m_value;
57 
58  QString jsonKey() const;
59  QString jsonValue() const;
60 
61  void init();
62  const wchar_t* fromObject(const QString& Key, const wchar_t* ptr);
63  const wchar_t* fromArray(const wchar_t* ptr);
64 
65  inline QString newKey(const QString& key)
66  { return key.trimmed().isEmpty() ? QString::number(m_index++) : key.trimmed(); }
67 
68  const wchar_t* parseKey(QString& Value, const wchar_t* ptr);
69  const wchar_t* parseValue(QString Key, const wchar_t* ptr);
70  const wchar_t* parseNumber(QString& Value, const wchar_t* ptr);
71  static inline const wchar_t* skip(const wchar_t* in)
72  {
73  while(in && *in && *in<=32)
74  {
75  in++;
76  }
77  return in;
78  }
79 
80 public:
81  int type() const { return m_type; }
82  void setType(int value) { m_type = (ValueTypeFlag) value; }
83 
84  QString key() const;
85  void setKey(const QString& value);
86  QVariant value() const;
87  inline QVariant value(const QString& key) const
88  { QVariant ret; value(key, ret); return ret; }
89  bool value(const QString& key, QVariant& v) const;
90  inline bool exists(const QString& key) const
91  {
92  QMap<QString, TcJSONObject*>::const_iterator child = m_list.find(key);
93  return child != m_list.constEnd() && child.key() == key;
94  }
95  inline int count() const { return m_list.count(); }
96  inline TcJSONObject* get(const QString& key) const
97  { return m_list[key]; }
98  QList<TcJSONObject*> children() const;
99 
100 
101  TcJSONObject* addObject(const QString& key="");
102  TcJSONObject* addArray(const QString& key);
103  TcJSONObject* addNull(const QString& key);
104  inline TcJSONObject* add(const QString& key, const char* value) { return add(key, QString(value)); }
105  TcJSONObject* add(const QString& key, const QString& value);
106  TcJSONObject* add(const QString& key, int value);
107  TcJSONObject* add(const QString& key, double value);
108  TcJSONObject* add(const QString& key, bool value);
109  TcJSONObject* add(const QString& key, QDateTime value);
110 
111  TcJSONObject* addNull();
112  inline TcJSONObject* add(const char* value) { return add(QString(value)); }
113  inline TcJSONObject* add(const QString& value) { return add(QString::number(m_index++), value); }
114  inline TcJSONObject* add(int value) { return add(QString::number(m_index++), value); }
115  inline TcJSONObject* add(double value) { return add(QString::number(m_index++), value); }
116  inline TcJSONObject* add(bool value) { return add(QString::number(m_index++), value); }
117  inline TcJSONObject* add(QDateTime value) { return add(QString::number(m_index++), value); }
118 
119  void deleteChildren(const QString& key);
120  void clearChildren();
121  void clear();
122 
123  virtual QString toString() const; // 取得
124 
125  bool fromString(QString jsonText);
126 };
127 // ==========================================================================
128 
129 #endif // TIANCHI_JSON_H