zoukankan      html  css  js  c++  java
  • QJson 的简单使用

    可用于通讯的数据序列化与反序列化函数

    #include <QJsonParseError>
    #include <QVariantMap>
    #include <QJsonObject>
    #include <QJsonArray>
    #include <QApplication>
    
    //序列化函数
    QByteArray generateJson( const QVariantMap& map ) noexcept
    {
      QJsonObject object = QJsonObject::fromVariantMap( map );
      QJsonDocument document( object );
      return document.toJson( QJsonDocument::Compact );
    }
    //反序列化函数
    QJsonObject parserJson( const QString& data ) noexcept( false )
    {
      QByteArray data_byte = data.toUtf8();
      QJsonParseError error;
      QJsonDocument doc = QJsonDocument::fromJson( data_byte, &error );
      if ( error.error == QJsonParseError::NoError )
      {
        if ( doc.isObject() )
        {
          return doc.object();
        }
        else
        {
          throw QString( "Not a object" );
        }
      }
      else
      {
        throw QString( "Not a Json : " ).append( error.errorString() );
      }
    }
    
    int main( int argc, char* argv[] )
    {
      QApplication a( argc, argv );
      // 声明数据
      QVariantMap task_list;
      QVariantMap task_info, task_info1;
      QVariantList agvStateList;
    
      //数据赋值
      task_info["taskNum"] = 8;
      task_info["stationId"] = "001";
      task_info1["taskNum"] = 6;
      task_info1["stationId"] = "002";
      agvStateList.push_back( task_info );
      agvStateList.push_back( task_info1 );
      task_list.insert( "AgvNum", 2 );
      task_list.insert( "Agvs", agvStateList );
    
      //Json转化为16进制数据用于通讯
      QByteArray data = generateJson( task_list );
      char* content = data.data();
      qint8* m_content = reinterpret_cast<qint8*>( content );


    //QVariantMap解析Json数据
    QVariantList list0 = task_list.value( "Agvs" ).toList();
    QVariantMap zx1 = list0.toMap();
    int task1 = zx1.value( "taskNum" ).toInt(); //16进制数据反序列化为Json数据解析 auto json_str = parserJson( reinterpret_cast<char*>( m_content ) ); int agv_num = json_str.value( "AgvNum" ).toInt(); QJsonArray zx = json_str.value( "Agvs" ).toArray(); QJsonObject zx1 = zx.at( 0 ).toObject(); int task1_num = zx1.value( "taskNum" ).toInt(); return a.exec(); }

    QVariantListzzzzz=task_list.value("Agvs").toList();

    QVariantMapmap=zzzzz[0].toMap();
    inttask1=map.value("taskNum").toInt();





  • 相关阅读:
    路由和数据传递
    ASP.NET MVC3 自定义编辑模版
    最新Bootstrap手册
    ASP.NET MVC Bundles 用法和说明(打包javascript和css)
    MVC匿名类传值学习
    .net通用类型转换方法
    C#.net XML的序列化与反序列化
    The Connection Strings Reference
    ASP.NET MVC使用AuthenticationAttribute验证登录
    ASP.NET MVC Bundles 之学习笔记
  • 原文地址:https://www.cnblogs.com/zx-hit/p/12421654.html
Copyright © 2011-2022 走看看