Json im QByteArray
Json im QByteArray
Hallo,
ich habe eine Textdatei die ich als QByteArray einlese. Der Aufbau der Datei ist:
{ID: 1, Name: "name.txt", Grösse: 456645}
[Binärdaten]
{ID: 1, Sonstiges: "blablabla"}
Ich lese die Datei Zeilenweise ein, bekomme also ohne Probleme das
{ID: 1, Name: "name.txt", Grösse: 456645}
in das QByteArray. Wie erhalte nun auf einfachem Weg Zugriff auf die einzelnen Werte?
Ich habe das via QScriptEngine probiert, aber das klappt nicht so wie ich es mir vorstelle.
ich habe eine Textdatei die ich als QByteArray einlese. Der Aufbau der Datei ist:
{ID: 1, Name: "name.txt", Grösse: 456645}
[Binärdaten]
{ID: 1, Sonstiges: "blablabla"}
Ich lese die Datei Zeilenweise ein, bekomme also ohne Probleme das
{ID: 1, Name: "name.txt", Grösse: 456645}
in das QByteArray. Wie erhalte nun auf einfachem Weg Zugriff auf die einzelnen Werte?
Ich habe das via QScriptEngine probiert, aber das klappt nicht so wie ich es mir vorstelle.
Auf dieser Seite: http://json.org/ stellt alles was du wissen must, um dir selbst einen kleinen Parser zu schreiben inkl. fertiger Parser für fast jede Programmiersprache.
Also, ich versuch das grade mit RexExp und einer StringList:
Nur anscheinend greift der RegExp nicht.
{ID: 17, Image: "Demo1.tif", Type: "TIFF", Width: 2436, Height: 3464, Length: 86437, CheckSum: d6241b81339e5d831d8c7202125b7db2}
{ID: 18, Tags: ["EIN", "BAUM", "WEIHNACHT"]}
Ist oben im Code was falsch?
Code: Alles auswählen
void MainWindow::parseString(QString str)
{
QRegExp rExp("([A-Za-z]+):(.+?(?=(?<!\[.+),|}))");
QStringList list;
list = str.split(rExp);
for (int i=0; i < list.size(); i++)
{
qDebug() << "Liste " << list.at(i).toLocal8Bit().constData();
}
}
{ID: 17, Image: "Demo1.tif", Type: "TIFF", Width: 2436, Height: 3464, Length: 86437, CheckSum: d6241b81339e5d831d8c7202125b7db2}
{ID: 18, Tags: ["EIN", "BAUM", "WEIHNACHT"]}
Ist oben im Code was falsch?
Code: Alles auswählen
(\w+):\s*("[^"]*"|[^"])
Hallo nochmal,
ich war leider bislang krank. Ich habe doch noch Probleme mit dem RegExp.
Kann ich leider nicht ausführen, da die doppleten Hochkommatas stören. Wie muss ich das richtig einsetzen?
Ich machs jetzt via
Aber dann ist das Ergebnis falsch.
In der Liste von
steht dann als Ergebnis:
aber es fehlen die Einträge in den Klammern [], wober ich die Ausgabe von ID und Tags gerne unterdrücken würde.
ich war leider bislang krank. Ich habe doch noch Probleme mit dem RegExp.
Code: Alles auswählen
QRegExp rx("(\w+):\s*("[^"]*"|[^"])");
Ich machs jetzt via
Code: Alles auswählen
QRegExp rx("(\\w+):\\s*(\"[^\"]*\"|[^\"])");
In der Liste von
Code: Alles auswählen
{ID: 1, Sonstiges: "blablabla"}
{ID: 18, Tags: ["EIN", "BAUM", "WEIHNACHT"]}
Code: Alles auswählen
"ID", "Tags"