#include "JsonTreeItem.h" JsonTreeItem::JsonTreeItem(JsonTreeItem *parent) { mParent = parent; } JsonTreeItem::~JsonTreeItem() { qDeleteAll(mChilds); } void JsonTreeItem::appendChild(JsonTreeItem *item) { mChilds.append(item); } JsonTreeItem *JsonTreeItem::child(int row) { return mChilds.value(row); } JsonTreeItem *JsonTreeItem::parent() { return mParent; } int JsonTreeItem::childCount() const { return mChilds.count(); } int JsonTreeItem::row() const { if (mParent) return mParent->mChilds.indexOf(const_cast(this)); return 0; } void JsonTreeItem::setKey(const QString &key) { mKey = key; } void JsonTreeItem::setValue(const QString &value) { mValue = value; } void JsonTreeItem::setType(const QJsonValue::Type &type) { mType = type; } QString JsonTreeItem::key() const { return mKey; } QString JsonTreeItem::value() const { return mValue; } QJsonValue::Type JsonTreeItem::type() const { return mType; } JsonTreeItem *JsonTreeItem::load(const QJsonValue &value, JsonTreeItem *parent) { JsonTreeItem *rootItem = new JsonTreeItem(parent); rootItem->setKey("root"); if (value.isObject()) { // Get all QJsonValue childs for (const QString &key : value.toObject().keys()) { QJsonValue v = value.toObject().value(key); JsonTreeItem *child = load(v, rootItem); child->setKey(key); child->setType(v.type()); rootItem->appendChild(child); } } else if (value.isArray()) { // Get all QJsonValue childs int index = 0; for (const QJsonValue &v : value.toArray()) { JsonTreeItem *child = load(v, rootItem); child->setKey(QString::number(index)); child->setType(v.type()); rootItem->appendChild(child); ++index; } } else { rootItem->setValue(value.toVariant().toString()); rootItem->setType(value.type()); } return rootItem; }