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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战