2014-11-07 13 views
5

Ich bin ganz neu zu Qt und ich habe eine sehr einfache Bedienung initialisieren, die ich tun möchte: ich folgende JSONObject erhalten haben:Wie QJsonObject von QString

{ 
    "Record1" : "830957 ", 
    "Properties" : 
    [{ 
      "Corporate ID" : "3859043 ", 
      "Name" : "John Doe ", 
      "Function" : "Power Speaker ", 
      "Bonus Points" : ["10 ", "45", "56 ", "34", "56", "10 ", "45", "56 ", "34", "56", "10 ", "45", "56 ", "34", "56", "10 ", "45", "56 ", "34", "56", "10 ", "45", "56 ", "34", "56 ", "10", "45 ", "56", "34 ", "56", "45"] 
     } 
    ] 
} 

Die JSon mit dieser überprüft wurde Syntax- und Gültigkeitsprüfung: http://jsonformatter.curiousconcept.com/ und wurde als gültig befunden.

verwendete ich QJsonValue Initialisierung von String für diese und konvertiert sie zu QJSonObject:

QJsonObject ObjectFromString(const QString& in) 
{ 
    QJsonValue val(in); 
    return val.toObject(); 
} 

ich die JSon bin Laden aus einer Datei beklebt:

QString path = "C:/Temp"; 
QFile *file = new QFile(path + "/" + "Input.txt"); 
file->open(QIODevice::ReadOnly | QFile::Text); 
QTextStream in(file); 
QString text = in.readAll(); 
file->close(); 

qDebug() << text; 
QJsonObject obj = ObjectFromString(text); 
qDebug() <<obj; 

Es gibt sicherlich eine gute Möglichkeit, Tun Sie dies, weil dies nicht funktioniert, und ich fand keine hilfreiche Beispiele

Antwort

15

Verwendung QJsonDocument::fromJson

QString data; // assume this holds the json string 

QJsonDocument doc = QJsonDocument::fromJson(data.toUtf8()); 

Wenn Sie die QJsonObject wollen ...

QJsonObject ObjectFromString(const QString& in) 
{ 
    QJsonObject obj; 

    QJsonDocument doc = QJsonDocument::fromJson(in.toUtf8()); 

    // check validity of the document 
    if(!doc.isNull()) 
    { 
     if(doc.isObject()) 
     { 
      obj = doc.object();   
     } 
     else 
     { 
      qDebug() << "Document is not an object" << endl; 
     } 
    } 
    else 
    { 
     qDebug() << "Invalid JSON...\n" << in << endl; 
    } 

    return obj; 
} 
+0

Danke für den Hinweis @ Merlin069! Ich schätze, das ist der Weg, um die Konvertierung zu machen, aber bis jetzt schlägt das Dokument die Prüfung fehl und die ganze Funktion gibt ein leeres nicht initialisiertes Objekt zurück. Hast du die Funktion versucht? –

+0

Wenn das Dokument nicht als Objekt gefunden werden kann, ist die Eingabezeichenfolge gemäß JSON nicht korrekt formatiert. – TheDarkKnight

+0

Laut [diesem Format-Checher] (http://jsonformatter.curiousconcept.com/) ist es gültig. –