0

Qt で '[[[1,2,3]],[[1,2,3],[1,2,3]],"string"]' の形式の JSON 配列からデータを抽出する必要があります。論理的には '[[[x-values]],[[y1-values],[y2-values]],"comments"]' です。

編集: x、y1、y2 配列は、最大 1000 個以上の要素を使用できます。

それが正確な形式 (一重引用符なし) であり、変更されないことはわかっています。

私が本当に欲しいのは QVector xval, y1val; です。.

それをどのように解析しますか?

(私はQtを初めて使用するので、明らかなことを見逃している場合はご容赦ください。)

4

1 に答える 1

1

迅速で汚い解決策:

QString s = "[[[1,2,3]],[[4,5,6],[7,8,9]],\"string\"]";
QStringList parts = s.remove("[").remove("]").split(',');

QVector<int> xval, yval;
if (parts.size() >= 6)
{
    xval << parts[0].toInt() << parts[1].toInt() << parts[2].toInt();
    yval << parts[3].toInt() << parts[4].toInt() << parts[5].toInt();
}

編集:可変長配列をサポートするようになりました:

QVector<int> ToIntList(const QString& s)
{
    QVector<int> result;
    QStringList parts = s.trimmed().split(",");
    for (int i = 0; i < parts.size(); ++i)
        result << parts[i].toInt();
    return result;
}

QString s = "[[[1,2,3,4,5,6, 7,  8]],[[9\n,10], [11,12,13]],\"string\"]";
QStringList lists = s.remove(" ").split("],[");

for (int i = 0; i < lists.size(); ++i)
    lists[i] = lists[i].remove("[").remove("]");

QVector<int> xval, yval;
if (lists.size() >= 2)
{
    xval = ToIntList(lists[0]);
    yval = ToIntList(lists[1]);
}
于 2012-10-21T10:28:18.820 に答える