json_t* configToJson(const AlgorithmConfig& config) const { json_t* jsonAlgorithmConfig = json_object(); std::set<std::string> names = config.getAllParamNames(); for ( std::set<std::string>::iterator iter = names.begin(); iter!=names.end(); iter++ ) { std::string name = *iter; std::string val = config.getConfigParam(name); json_t* jsonVal = toJsonString(val); json_object_set_new(jsonAlgorithmConfig, name.c_str(), jsonVal); } return jsonAlgorithmConfig; }
Json::Value QSanProtocol::Utils::toJsonArray(const QStringList &arg) { Json::Value val(Json::arrayValue); foreach (QString s, arg) val.append(toJsonString(s)); return val; }
QString ConversionUtil::toJsonString(const QVariant &variant, Options options) { switch (variant.type()) { case QVariant::Bool: return variant.toBool() ? "true" : "false"; case QVariant::Int: return QString::number(variant.toInt()); case QVariant::UInt: return QString::number(variant.toUInt()); case QVariant::Double: return QString::number(variant.toDouble()); case QVariant::String: return variant.toString().isEmpty() ? QString() : jsString(variant.toString()); case QVariant::List: { QStringList stringList; for (const QVariant &item : variant.toList()) { stringList.append(ConversionUtil::toJsonString(item)); } if (stringList.isEmpty()) { return QString(); } else { return "[ " + stringList.join(", ") + " ]"; } } case QVariant::StringList: { QStringList stringList; for (const QString &string : variant.toStringList()) { stringList.append(jsString(string)); } if (stringList.isEmpty()) { return QString(); } else { return "[ " + stringList.join(", ") + " ]"; } } case QVariant::DateTime: return QString::number(variant.toDateTime().toMSecsSinceEpoch()); case QVariant::Map: { QStringList stringList; QVariantMap map = variant.toMap(); for (const QString &key : map.keys()) { QVariant value = map[key]; QString jsonString = toJsonString(value, options); if (!jsonString.isEmpty()) { if (options & IncludeTypeInfo) { stringList.append(QString("%1: [ %2, %3, %4 ]") .arg(jsString(key), QString::number(value.type()), QString::number(value.userType()), jsonString)); } else { stringList.append(QString("%1: %2").arg(jsString(key), jsonString)); } } } return stringList.isEmpty() ? QString() : "{ " + stringList.join(", ") + " }"; } case QVariant::UserType: { MetaTypeRegistry::JsonConverters converters = MetaTypeRegistry::jsonConverters(QMetaType::typeName(variant.userType())); if (converters.typeToJsonStringConverter) { return converters.typeToJsonStringConverter(variant); } else { const char *typeName = QMetaType::typeName(variant.userType()); if (typeName) { LogUtil::logError("User type not serializable: %1", typeName); } else { LogUtil::logError("Unknown user type: %1", QString::number(variant.userType())); } return QString(); } } default: LogUtil::logError("Unknown type: %1", variant.typeName()); return QString(); } }