Bootstrap

QT解析、修改json文件

QT解析 JSON 格式的数据_qt json数据解析-CSDN博客 

Qt 操作Json格式文件(创建、插入、解析、修改、删除)_qt json数据处理-CSDN博客

一、解析

 QFile file(jsonPath);
    if (!file.open(QFile::ReadOnly | QFile::Text)) {
        qDebug() << "can't open error!";        
        return;
    }
    // 读取文件的全部内容
    QByteArray jsData = file.readAll();
    file.close();

    QJsonParseError jsonError;
    QJsonDocument   JsonDoc = QJsonDocument::fromJson(jsData, &jsonError);
    if (jsonError.error != QJsonParseError::NoError && !JsonDoc.isNull()) {
        qDebug() << "Json格式错误!" << jsonError.error;      
        return;
    }

二、修改json

1.获取根节点

 QJsonObject jsonObject = JsonDoc.object();//{}

2.获取节点修改内容

QJsonArray【】的内容有顺序,按QJsonArray::at(int i).value()找值;

QJsonObject{}没顺序,按键找值QJsonObject ::value("键");

1例子.
{
  "basicMsg": {
    "次数": "10次",
    "城市": "武汉,长沙",
    "天气": "晴",
    "平均车速": "52 km/h",
  }
}
1.代码
//获取basicMsg:{}节点
QJsonObject basicSubObj= jsonObject.value(QStringLiteral("basicMsg")).toObject();
//修改内容
basicSubObj["次数"]="20";//basicSubObj[键]=新值
basicSubObj["城市"]="北京";
basicSubObj["天气"]= "晴";
basicSubObj["平均车速"]="20km/h";
//把修改的内容在根节点更新,否则会无效
jsonObject["basicMsg"]= basicSubObj;//根节点[键]=新值
例子2:修改id为tag1,清空data_rows内容并添加新内容
{
"tables": [
    {
      "id": "tag",
      "titles": [
        "名称",
        "开始时间",
        "结束时间",
        "内容"
      ],
      "data_rows": [
        [
          "标签1",
          "08:23:41",
          "08:28:19",
          "早晨;晴天"
        ],
        [
          "标签2",
          "08:23:41",
          "08:28:19",
          "早晨;晴天"
        ],
      ]
    },
{
      "id": "event",
      "titles": [
        "名称",
        "开始时间",
        "结束时间",
        "内容"
      ],
      "data_rows": [
        [
          "事件1",
          "08:23:41",
          "08:28:19",
          "早晨;晴天"
        ],
        [
          "事件2",
          "08:23:41",
          "08:28:19",
          "早晨;晴天"
        ],
      ]
    }
}
//获取  "tables": []节点
QJsonArray tables = jsonObject.value(QStringLiteral("tables")).toArray();
for (int i = 0; i < tables.count(); i++) {
QJsonObject tableObj = tables.at(i).toObject();//获取 "tables": [{},{},{}]节点内的第i个{}结点
QJsonArray  RowArr   = tableObj.value(QStringLiteral("data_rows")).toArray();
while (RowArr.count()) {
RowArr.pop_back();  //清空内容
}
if (tables.at(i).toObject().value(QStringLiteral("id")).toString() == "tag") {
 QJsonArray addRow;
        addRow.append("标签");
        addRow.append("");  //开始时间
        addRow.append("");   //结束时间
        addRow.append("");    //标签内容
        RowArr.append(addRow);
}
tableObj["data_rows"] = RowArr;
tables.replace(i, tableObj);
}
jsonObject["tables"] = tables;

;