WARNING: USE THIS SOFTWARE AT YOUR OWN RISK! THIS IS EXPERIMENTAL SOFTWARE NOT INTENDED FOR PRODUCTION USE! Zuble is currently an early stage prototype. As such Zuble is minimally tested and inherently unstable. It is provided for experimental, development, and demonstration purposes only. Zuble QML Types   |  Zuble C++ Classes   |  Zuble Overview
Zuble  0.1
Zuble Framework C++/QML extension API
ZblJsonHelper.cpp
Go to the documentation of this file.
1 #include "ZblJsonHelper.h"
2 #include <QJSEngine>
3 #include <QJsonDocument>
4 #include <QJsonObject>
5 #include <QJsonArray>
6 #include <QJsonValue>
7 
8 
9 namespace Zbl
10 {
11 
12 ZblJsonHelper::ZblJsonHelper(QJSEngine *engine) : m_engine(engine)
13 {
14 
15 }
16 
17 QJSValue ZblJsonHelper::JsonTextToValue(QString jsonText)
18 {
19  if(jsonText.isNull() || jsonText.isEmpty())
20  return QJSValue();
21 
22  QJsonDocument doc = QJsonDocument::fromJson(jsonText.toUtf8());
23 
24  if(doc.isObject())
25  {
26  QJsonObject obj = doc.object();
27 
28  return JsonObjectToValue(obj);
29  }
30  else if(doc.isArray())
31  {
32  QJsonArray array = doc.array();
33 
34  return JsonArrayToValue(array);
35  }
36 
37  return QJSValue();
38 }
39 
40 QJSValue ZblJsonHelper::JsonArrayToValue(QJsonValue& jsonArrayValue)
41 {
42  QJsonArray array = jsonArrayValue.toArray();
43  return JsonArrayToValue(array);
44 }
45 
46 QJSValue ZblJsonHelper::JsonArrayToValue(QJsonArray &array)
47 
48 {
49  QJSValue jsVal = m_engine->newArray();
50 
51  QJsonArray::const_iterator it = array.constBegin();
52 
53  for(quint32 i=0; it != array.constEnd(); i++)
54  {
55  QJsonValue jsonVal = *it++;
56 
57  QJSValue nextValue = JsonValueToValue(jsonVal);
58 
59  jsVal.setProperty(i, nextValue);
60  }
61 
62  return jsVal;
63 }
64 
65 QJSValue ZblJsonHelper::JsonObjectToValue(QJsonValue &jsonObjectValue)
66 {
67  QJsonObject obj = jsonObjectValue.toObject();
68  return JsonObjectToValue(obj);
69 }
70 
71 QJSValue ZblJsonHelper::JsonObjectToValue(QJsonObject &obj)
72 {
73  QJSValue objVal = m_engine->newObject();
74 
75  QJsonObject::const_iterator it = obj.constBegin();
76 
77  while(it != obj.constEnd())
78  {
79  QJsonValue jsonVal = it.value();
80  QString nextKey = it.key();
81 
82  objVal.setProperty(nextKey, JsonValueToValue(jsonVal));
83 
84  it++;
85  }
86 
87  return objVal;
88 
89 }
90 
91 QJSValue ZblJsonHelper::JsonValueToValue(QJsonValue& jsonVal)
92 {
93  QJSValue value;
94 
95  switch(jsonVal.type())
96  {
97  case QJsonValue::Null:
98  value = QJSValue(QJSValue::NullValue);
99  break;
100  case QJsonValue::Bool:
101  value = QJSValue(jsonVal.toBool());
102  break;
103  case QJsonValue::Double:
104  value = QJSValue(jsonVal.toDouble());
105  break;
106  case QJsonValue::String:
107  value = QJSValue(jsonVal.toString());
108  break;
109  case QJsonValue::Array:
110  //array = jsonVal.toArray();
111  value = JsonArrayToValue(jsonVal);
112  break;
113  case QJsonValue::Object:
114  //object = jsonVal.toObject();
115  value = JsonObjectToValue(jsonVal);
116  break;
117  case QJsonValue::Undefined:
118  break;
119 
120  }
121  return value;
122 
123 }
124 
125 QString ZblJsonHelper::ValueToJson(QJSValue& value)
126 {
127  QVariant var = value.toVariant();
128 
129  QJsonDocument doc = QJsonDocument::fromVariant(var);
130 
131  QByteArray jsonText = doc.toJson();
132 
133  return QString(jsonText);
134 }
135 
136 
137 } // Zbl
QString ValueToJson(QJSValue &value)
QJSValue JsonArrayToValue(QJsonValue &jsonArrayValue)
QJSValue JsonObjectToValue(QJsonValue &jsonObjectValue)
ZblJsonHelper(QJSEngine *engine)
Definition: ZAndGate.cpp:6
QJSValue JsonTextToValue(QString jsonText)
QJSValue JsonValueToValue(QJsonValue &jsonVal)
QJSEngine * m_engine
Definition: ZblJsonHelper.h:38