解析JSON ON QT

时间:2017-01-05 09:36:57

标签: c++ json qt

是否可以在json中使用运算符 || ,如下所示:

{
"ven":{
    "source":"logicCtrl" ,
     "msg":"radio_volume" || "radio-mute", || "radio3",
     "type":"int"
      }
}

我可以通过解析C ++中的数据来获取数据,如下所示:

QFile jsonFile("VenParser.json");
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text))
{
    qDebug() << "problème d'overture du fichier, exit";

}

QByteArray jsonData = jsonFile.readAll();

QJsonParseError *err = new QJsonParseError();

QJsonDocument doc = QJsonDocument::fromJson(jsonData, err);

if (err->error != 0)
    qDebug() << err->errorString();

Venparser myparser;

if (doc.isNull())
{
    qDebug() << "Document invalide";

}
else if (doc.isObject())
{
    //recuperer l'object json
    QJsonObject jObject = doc.object();

    //convertir l'object json to variantmap
    QVariantMap mainMap = jObject.toVariantMap();

    // variant map
    QVariantMap Map = mainMap["ven"].toMap();

    myparser.source = Map["source"].toString();
    myparser.msg =  Map["msg"].toString();
    myparser.type = Map["type"].toString();

header.H文件:我定义了我的结构

struct Venparser {
    QString source;
    QString msg;
    QString type;

我的问题是我不想在我的&#34; msg&#34;但是这样的事情:

当我拨打 myparser.msg 时,它会在 msg 中检查我需要的值并将其返回。

&#34; MSG&#34;:&#34; radio_volume&#34; || &#34; radio-mute&#34;,|| &#34; radio3&#34;,

谢谢,

1 个答案:

答案 0 :(得分:0)

使用||令牌的示例不是有效的JSON。您可以阅读有关其格式here的更多信息。但是,如果我理解正确,您可以轻松地将JSON数组用于您的任务。

JSON:

{
  "ven": {
    "source": "logicCtrl",
    "msg": ["radio_volume", "radio-mute", "radio3"],
    "type": "int"
  }
}

C ++:

您可以使用msg方法访问toStringList()数组。此外,如果使用与字符串不同的数据填充数组,则可以分别使用QVariantListtoList()

QStringList messages = Map["msg"].toStringList();

现在messages变量包含“radio_volume”“radio-mute”“radio3”值,因此您可以使用您的代码以任何方式提取所需的字符串。

如果您仍然需要解析您的确切示例(在技术上不是我之前所说的有效JSON),您将不得不编写自己的解析器,这对于答案来说是一个广泛的主题。