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();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM