//метод парсит json-строку void DataManager::fromJsonString(QString jsonString) { QJsonDocument parser = QJsonDocument::fromJson(jsonString.toUtf8()); DataManager temp = fromVariant(parser.toVariant()); //QVariant - единственный более-менее удобный для работы формат, //в который стандартные средства позполяют //сконвертировать объекты типа QJsonDocument setType(temp.getType()); //qDebug() << "[]: Null node " << getParent(); qDebug() << "[]: first node " << this; switch(temp.getType()) { case T_STRING: { stringValue = temp.stringValue; break; } case T_INT: { intValue = temp.intValue; break; } case T_DOUBLE: { doubleValue = temp.doubleValue; break; } case T_BOOL: { boolValue = temp.boolValue; break; } case T_MAP: { object = temp.object; break; } case T_LIST: { array = temp.array; break; } } }
//метод добавляет к текущему узлу дерева новый узел void DataManager::append(DataManager node, QString nName) { using namespace std; switch(nodeType) { case T_MAP: { node.setName(nName); //node.setParent(&object.first()); object.insert(nName, node); break; } case T_LIST: { if(node.getType() == T_LIST) { for(int i=0; i<node.size(); i++) { //node.at(i).setParent(&array.first()); array.append(node.at(i)); } } else { //node.setParent(&array.first()); array.append(node); } break; } default: { cout << "[DataManager::append()] node " << nName.toStdString() << " data type mismatch!\n"; break; } } }