大部分应用在网络请求中

1.QJsonObject和QByteArray的互相转换

可以将QJsonObject与QByteArray互相转化,以便网络编程时客户端与服务器之间的通信

1.1 QJsonObject转为QByteArray

  1. QJsonObject json;
  2. QByteArray ary;
  3. QJsonDocument doc(json);
  4. ary= doc.toJson();

1.2 QByteArray转为QJsonObject

  1. QByteArray ary;
  2. QJsonObject json;
  3. json = QJsonDocument::fromJson(ary).object();

2.HTTP操作

image.png
下列代码使用网上别人写好的一个库

2.1 get

  1. m_httpClient 是成员变量
  2. void Httptest::httpTest()
  3. {
  4. m_httpClient.get("http://122.51.80.50:8000/pump/")
  5. .queryParam("pump_code", "001")
  6. .onResponse([](QByteArray result){
  7. QJsonObject json;
  8. json = QJsonDocument::fromJson(result).object();
  9. // QJsonArray array = json.value("results").toArray();
  10. // qDebug() << "Result: " << array[1].toObject()["pump_code"].toString();
  11. qDebug() << "result " << json;
  12. })
  13. .onError([](QString errorStr){
  14. qDebug()<<"Error: "<<errorStr;
  15. })
  16. .exec();
  17. }

获取到的数据

2.2 put

  1. void Httptest::httpPut()
  2. {
  3. QJsonObject content;
  4. content.insert("fluid_flow", "20");
  5. content.insert("mod_by", "3131f40fcb1b41a9a5bca7b41689b85a");
  6. qDebug() << "content = " << content;
  7. m_httpClient.put("http://122.51.80.50:8000/pump/1d3506ac8e0348879f9f483441365ad5/")
  8. .header("content-type", "application/json")
  9. .body(content)
  10. .onResponse([](QByteArray result){
  11. qDebug() << "成功";
  12. //qDebug() << result;
  13. })
  14. .onError([](QString errorStr){
  15. qDebug()<<"Error: "<<errorStr;
  16. })
  17. .exec();
  18. }

代码如下:
webhttp.rar
2。3 POST

  1. bool MyHttp::sendSensorConfig()
  2. {
  3. //没有网络就结束
  4. //插入设备编号
  5. QJsonObject content;
  6. content.insert("equipment_code", getEquipmentCode());
  7. content.insert("sensor_string", getSensorName());
  8. content.insert("high_sensor_threshold_string", getSensorThread(high));
  9. content.insert("down_sensor_threshold_string", getSensorThread(low));
  10. content.insert("sensor_code_string", getSensorCode());
  11. content.insert("equip_person", setting.getSetting("equipment", "configPerson"));
  12. QString sensorUrl = QString("http://%1:8000/equipment/").arg(getUrl());
  13. m_httpClient.post(sensorUrl)
  14. .header("content-type", "application/json")
  15. .body(content)
  16. .onResponse([=](QByteArray result){
  17. Q_UNUSED(result);
  18. // qDebug() << "传感器配置成功";
  19. correct = true;
  20. })
  21. .onError([=](QString errorStr){
  22. correct = false;
  23. qDebug() << errorStr;
  24. })
  25. .block()
  26. .timeout(2000)
  27. .exec();
  28. return correct;
  29. }

2. JSON操作

包含头文件

  1. #include <QJsonDocument>
  2. #include <QJsonObject>
  3. #include <QJsonArray>

获取到的JSON数据

  1. ({"count":1,
  2. "results":[{"create_by":"75bd4fd79e48448ebae23c905973a742",
  3. "create_time":"2021-01-28",
  4. "equipment_code":"20210128w",
  5. "fluid_flow":"35(已修改)",
  6. "mod_by":"3131f40fcb1b41a9a5bca7b41689b85a",
  7. "mod_time":"2021-02-04","note":"测试",
  8. "pump_code":"001",
  9. "pump_id":"1d3506ac8e0348879f9f483441365ad5",
  10. "pump_name":"测试泵1号",
  11. "status":"1"}]
  12. })

一般获得http的数据是QByteArray
先转换为JSON

  1. //result是如上的代码
  2. QJsonObject json;
  3. json = QJsonDocument::fromJson(result).object();
  4. //取值 取result的值 返回值是QJsonValue
  5. QJsonValue value = json.value("results");
  6. //同上一样
  7. QJsonValue value = json["results"];
  8. //打印为结果1
  9. qDebug() << "array " << value;

结果1

  1. QJsonValue(array,
  2. QJsonArray([{"create_by":"75bd4fd79e48448ebae23c905973a742",
  3. "create_time":"2021-01-28",
  4. "equipment_code":"20210128w",
  5. "fluid_flow":"20","mod_by":"3131f40fcb1b41a9a5bca7b41689b85a",
  6. "mod_time":"2021-02-20","note":"测试",
  7. "pump_code":"001",
  8. "pump_id":"1d3506ac8e0348879f9f483441365ad5",
  9. "pump_name":"测试泵1号",
  10. "status":"1"}])

注意返回的是一个QJsonArray,我们需要
继续从上述取值
我们需要先转换为QJsonArray然后转换为value或者【】取值

  1. //QJsonArray
  2. QJsonArray value = json["results"].toArray();
  3. // QJsonValue(object, QJsonObject... QJsonValue(string, "测试泵1号")
  4. QJsonValue value2 = value[0].toObject().value("pump_name");
  5. //转为字符串 "测试泵1号"
  6. QString value3 = value2.toString();

遍历
image.png

数组遍历 foreach

  1. QJsonObject json;
  2. json = QJsonDocument::fromJson(result).object();
  3. QJsonArray value = json["data"].toArray();
  4. int i = 0;
  5. foreach (QJsonValue test, value) {
  6. qDebug() << "test = " << test;
  7. qDebug() << "i = " << i++;
  8. }

for循环

  1. QJsonObject json;
  2. json = QJsonDocument::fromJson(result).object();
  3. QJsonArray value = json["data"].toArray();
  4. QJsonArray::iterator iteratorArray = value.begin();
  5. for (int i = 0; i < value.size(); i++) {
  6. qDebug() << iteratorArray[i];
  7. qDebug() << "i = " << i;
  8. }