【Qt Quick】Json文件读写

说明

QJsonDocument并不会直接操作文件,需要自行利用QFile进行readAll或者Write;

读取文件

利用Qml的读写文件的操作将Json格式的文件内容传给QJsonDocument就可以操作了

void UDP::analysisJson()
{
       FileObject fo;
       QJsonParseError error;

       //读取文件
       QJsonDocument _json = QJsonDocument::fromJson(fo.readFile().toUtf8(), 
&error);

       //判断错误
       if (error.error == QJsonParseError::NoError)
       {
              auto json_text = _json.toJson(QJsonDocument::Indented);
              auto json_binary = _json.toBinaryData();
              QJsonDocument read1 = QJsonDocument::fromJson(json_text);

              QJsonDocument read2 = QJsonDocument::fromBinaryData(json_binary);

              //验证
              if (QString(read1.toBinaryData()) == QString(read2.toBinaryData()))
              {
                     qDebug() << "相同";
                     //判断是否为空
                     if (read1.isEmpty())
                     {
                           qDebug() << "空的";
                           return;
                     }
                     //解析
                     if (read1.isObject())
                     {
                           auto read_object = read1.object();
                           if (!read_object.isEmpty())
                           {
                                  qDebug() << 
read_object.value("targetDataGenerationTimestamp").toInt();
                                  qDebug() << 
read_object.value("targetAttribute").toInt();

                                  //qDebug()<<read_object.value("null").isNull();
                                  QJsonValue value = 
read_object.value("targetSpeed");
                                  // qDebug()<<value.type()<<value;

                                  if (value.isArray())
                                  {
                                         auto read_array = value.toArray();
                                         for (auto one_of_array : read_array)
                                         {
                                                // qDebug()<<one_of_array;
                                         }
                                  }
                           }
                     }
              }
       }
}


写文件

void UDP::buildJson()
{
       //构建json文档
       QJsonDocument json;
       QJsonObject object;
       QJsonArray targetSpeed;
       QJsonArray targetLocal;
       QJsonArray targetAngle;


       //目标数量
       object.insert("targetNumber", 2);
       //目标名字
       object.insert("targetName", "liehuo");
       //目标属性
       object.insert("targetAttribute", 2);
       //目标类型
       object.insert("targetType", 1);
       //目标实例编号
       object.insert("targetInstanceNumber", 857);
       //目标所属型号编号
       object.insert("targetModelNumber", 15);
       //目标子目标实例编号
       object.insert("targetSonInstanceNumber", 159);
       //目标子类型编号
       object.insert("targetSonModelNumber", 11);
       //目标子类型规格编号
       object.insert("targetSonModelSpecificationNumber", 19);
       //目标飞行时间
       object.insert("targetFlightTime", 65146514);
       //目标数据生成时间戳
       object.insert("targetDataGenerationTimestamp", 1519264);

       //目标位置
       targetLocal.append(123);//x
       targetLocal.append(456);//y
       targetLocal.append(789);//z
       object.insert("targetLocal", targetLocal);

       //目标速度
       targetSpeed.append(555);//xspeed
       targetSpeed.append(888);//yspeed
       targetSpeed.append(999);//zspeed
       object.insert("targetSpeed", targetSpeed);

       //目标1偏航角
       targetAngle.append(2236);//偏航角
       targetAngle.append(2165);//俯仰角
       targetAngle.append(1595);//滚转角
       object.insert("targetAngle", targetAngle);

       //最外层是大括号所以是object
       json.setObject(object);

       qDebug() << json.toJson(QJsonDocument::Indented);

       fo.writeFile(json.toJson(QJsonDocument::Indented));

}


Json的基本使用

参考

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非西昂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值