18 #include "viewjson_p.h"
20 #include <Cutelyst/context.h>
21 #include <Cutelyst/response.h>
23 #include <QtCore/QJsonDocument>
24 #include <QtCore/QJsonObject>
43 case QJsonDocument::Indented:
57 d->format = QJsonDocument::Indented;
60 d->format = QJsonDocument::Compact;
73 d->exposeMode = ViewJson::String;
80 d->exposeMode = ViewJson::StringList;
87 d->exposeMode = ViewJson::RegularExpression;
94 d->xJsonHeader = enable;
100 return d->xJsonHeader;
109 const QVariantHash stash = c->
stash();
111 switch (d->exposeMode) {
113 obj = QJsonObject::fromVariantHash(stash);
117 auto it = stash.constFind(d->exposeKey);
118 if (it != stash.constEnd()) {
119 obj.insert(d->exposeKey, QJsonValue::fromVariant(it.value()));
125 QVariantHash exposedStash;
127 auto it = stash.constBegin();
128 while (it != stash.constEnd()) {
129 const QString &key = it.key();
130 if (d->exposeKeys.contains(key)) {
131 exposedStash.insertMulti(key, it.value());
135 obj = QJsonObject::fromVariantHash(exposedStash);
138 case RegularExpression:
140 QVariantHash exposedStash;
141 QRegularExpression re = d->exposeRE;
143 auto it = stash.constBegin();
144 while (it != stash.constEnd()) {
145 const QString &key = it.key();
146 if (re.match(key).hasMatch()) {
147 exposedStash.insertMulti(key, it.value());
151 obj = QJsonObject::fromVariantHash(exposedStash);
157 if (d->xJsonHeader && c->request()->headers().contains(QStringLiteral(
"X_PROTOTYPE_VERSION"))) {
158 res->
setHeader(QStringLiteral(
"X_JSON"), QStringLiteral(
"eval(\"(\"+this.transport.responseText+\")\")"));
163 return QJsonDocument(obj).toJson(d->format);
166 #include "moc_viewjson.cpp"