qt的json

总结

封装json
很多键值对就是一个QJsonObject对象 添加键值对 QJsonObject obj; obj.insert( “a”,4);
数组里添加 QJsonArray lan; lan.append(“值”); 然后将这个添加到obj里面 obj.insert(“b”,lan);
添加对象 QJsonObject obj1; obj1.insert( “c”,5); obj.insert(“c”,obj1);

解析json
1.得到的一般是qstring类型或者是二进制类型 qstring要转化为二进制类型 QByteArray bytearr = jsonStr.toUtf8();
2.将二进制转化为QJsonDocument类型
QJsonParseError err; //错误信息
QJsonDocument doc=QJsonDocument::fromJson(bytearr,&err);
3.将 QJsonDocument转化为QJsonObject类型 QJsonObject rootObj=doc.object();
4. 解析
if(err.error!=QJsonParseError::NoError)
{
qDebug()<<“Json格式错误”;
}else{
//解析json
QJsonValue namevalue= rootObj.value(“name”);
qDebug()<<namevalue.toString();//如果name对应的值是string用这个,如果是int则toInt
}
其他1.如果键值对的值如果是对象 将其转化为QJsonObject类型
QJsonValue value1=rootObj.value(“ren”);
QJsonObject value1obj=value1.toObject();再像上面那样获取值
其他2.如果键值对的值如果是数组 将其转化为QJsonArray类型
QJsonValue value1=rootObj.value(“ren”);
QJsonArray value1arr=value1.toArray();
for(int i=0;i<value1arr.count();i++)
{
QJsonValue l=value1arr.at(i);
}

有个常用转换 常用转换

#include <QCoreApplication>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonValue>
#include <QDebug>

//解析json

//读取json
void test2(QString jsonStr)
{
  

   //如果有错误信息
     QJsonParseError err;
   //二进制转换成QJsonDocument   QJsonDocument doc=QJsonDocument::fromJson(jsonStr,&err);
   //QString转换 需要将其转换成二进制 QByteArray bytearr = str.toUtf8();
    QByteArray bytearr = jsonStr.toUtf8();
    QJsonDocument doc=QJsonDocument::fromJson(bytearr,&err);
   //将QJsonDocument转换成QJsonObject
    QJsonObject rootObj=doc.object();


    if(err.error!=QJsonParseError::NoError)
    {
        qDebug()<<"Json格式错误";

    }else{
        //解析json
      QJsonValue namevalue=  rootObj.value("name");
      qDebug()<<namevalue.toString();//如果name对应的值是string用这个,如果是int则toInt
    }
    /*
     * 对于对象或者数组
     * 要将其转换为对象或者数组
     * QJsonValue value1=rootObj.value("ren");
     * QJsonObject value1obj=value1.toObject();再像上面那样获取值
     * 
     * 对于数组将其转化为数组
     * QJsonValue value1=rootObj.value("ren");
     * QJsonArray value1arr=value1.toArray();再像上面那样获取值
     * 
     * for(int i=0;i<value1arr.count();i++)
     * {
     * QJsonValue l=value1arr.at(i);
     * 
     * }
    */

}

//封装json
void test1()
{
    QJsonObject rootObj;
    rootObj.insert("name","milo");
    rootObj.insert("age",18);
    /*{}是对象
     * "professional":
     * { "english":4,
     *   "putonhhua":2
     * }
     * 因此要申请一个对象QJsonObject
    */

    QJsonObject professionalobj;
    professionalobj.insert( "english",4);
     professionalobj.insert( "putonhhua",2);

     rootObj.insert("duixiang",professionalobj);
   //  rootObj.insert(professionalobj);
     /*[]是数组
      * "languages":["c++","c"]
      * 因此要申请一个数组
     */
     QJsonArray lan;
     lan.append("c++");
     lan.append("c");
     /*[{},{}]是数组 里面是对象
      * 先创建两个对象,insert加进去
      * 再append加进数组
     */
     rootObj.insert("shuzu",lan);
     /*对于值是true
      * rootObj.insert("vip",true);
     */
     rootObj.insert("vip",true);
     /*对于值是Null
      * rootObj.insert("vip",true);
     */

     QJsonDocument doc;
     doc.setObject(rootObj);
     QByteArray byteArr=doc.toJson();
     //json字符串
     QString jsonStr =QString(byteArr);

     qDebug()<<jsonStr;
     test2(jsonStr);


}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    test1();


    return a.exec();
}


另外转载一些常用的转换 原文链接:https://blog.csdn.net/u013352076/article/details/103270501
1、QString到QJsonArray

QString tmp = answerStateBarCtrl->hupingdata();
QJsonDocument document;
QJsonParseError err;
document = QJsonDocument::fromJson(tmp.toUtf8(), &err);

if (err.error != QJsonParseError::NoError)

{
qDebug() << "Parse json " << tmp.toUtf8() << " error: " << err.error;
return;
}

QJsonArray data(document.array());

2、QString到QJsonObject

QString tmp = answerStateBarCtrl->hupingdata();
QJsonDocument document;
QJsonParseError err;
document = QJsonDocument::fromJson(tmp.toUtf8(), &err);

if (err.error != QJsonParseError::NoError)

{
qDebug() << "Parse json " << tmp.toUtf8() << " error: " << err.error;
return;
}

QJsonObject data(document.object() );

3、QJsonArray 到QJsonObject--------到获取其中的某个键对应得值

    QJsonArray data(document.array());
int ncount = data.size();
QJsonArray senddata;
for (int j = 0; j < ncount; j++)
{
    QJsonValue name_value = data.at(j);
    QJsonObject temp1 = name_value.toObject();
    QJsonValue value = temp1.value("name");
    QString studentname = value.toString();

}

4、QJsonObject到QByteArray

QJsonObject r

{
{ “type”, type},
{ “num”,v2}
};
QByteArray byte_array = QJsonDocument®.toJson(QJsonDocument::Compact);

5、QByteArray到QString

     QString(byte_array)

6、QJsonArray 到QByteArray

QJsonArray array; // 构造QJsonArray
array.insert(0,“234”);//插入字符串QString
array.insert(1,object);//插入QJsonObject
array.insert(2,object2);
// QJsonArray转换成QByteArray
QJsonDocument document=QJsonDocument(array);
QByteArray byte_array = document.toJson();
7、QByteArray转换成QJsonArray

QJsonDocument document2=QJsonDocument::fromJson(byte_array);

QJsonArray array2 = document2.array();

json安装

形式与这个一样https://blog.csdn.net/nanfeibuyi/article/details/86605234
但是报错误
在这里插入图片描述
是因为操作系统的位数不一样,所以要重新弄64位的

两篇安装json文章https://blog.csdn.net/sdau_clt/article/details/103746280
https://blog.csdn.net/weixin_41010318/article/details/85627013

第三篇https://blog.csdn.net/weixin_45861321/article/details/115209555


1.从github中下载zip(这里有makefile文件 或者有cmakeLists.txt)然后上传到服务器上解压
2.在解压后的文件夹里面 新建一个目录build 进入build目录里面
3.使用外部编译 cmake …
4.输入ll回车发现有Makefile
5.然后直接输入make
6. 输入make install 就会安装
7. 在这里插入图片描述

但可以发现cjson的自述文件和上述过程是一样的
在这里插入图片描述

编译代码gcc jsontest1.c -o mul_server -I /usr/local/include/cjson/ -L /usr/local/lib/ -lcjson
可以编译成功,但是在运行的时候发现无法打开出现cannot open shared object file: No such file or directory
这是运行export LD_LIBRARY_PATH=/usr/local/lib/ 再运行 便可以成功

C语言json与char数组的转化https://blog.csdn.net/weixin_30613433/article/details/98998612

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

贪睡的蜗牛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值