- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想在 Qt 中使用 Json,我在 QJsonObject
中的数据必须以某种特定的顺序排列,因为我们有一些通过 token 和获取 Json 哈希的确认方法。
因为 QJsonObject
按字母顺序对它的键值对进行排序,所以我会发生这样的事情:
QJsonObject object;
object.insert("B","b");
object.insert("A","a");
qDebug() << QJsonDocument(object).toJson(); // this-line
我希望这一行打印出这样的东西:
{"B":"b","A":"a"}
但是我得到了这个:
{
"A":"a",
"B":"b"
}
我写了一个类:
jsonobject.h
class JsonObject
{
public:
JsonObject();
void insert(QString key,QJsonValue value);
void remove(QString key);
QString toJsonString();
QString convertQJsonValue2String(QJsonValue value);
QString convertQJsonArray2String(QJsonArray array);
QString convertQJsonObject2String(QJsonObject object);
private:
void appendKey(QString key,QString * out);
QJsonObject qJsonObject;
QStringList keysInOrder;
};
jsonobject.cpp
#include "jsonobject.h"
JsonObject::JsonObject()
{
keysInOrder.clear();
}
void JsonObject::insert(QString key, QJsonValue value)
{
if(!keysInOrder.contains(key))
keysInOrder.append(key);
qJsonObject.insert(key,value);
}
void JsonObject::remove(QString key)
{
keysInOrder.removeOne(key);
qJsonObject.remove(key);
}
QString JsonObject::toJsonString()
{
QString out;
for(int i = 0 ; i < keysInOrder.size() ; i++)
{
appendKey(keysInOrder[i],&out);
out.append(convertQJsonValue2String(qJsonObject.value(keysInOrder[i])));
if(i != (keysInOrder.size() - 1))
out.append(",");
}
return out.prepend("{").append("}");
}
QString JsonObject::convertQJsonObject2String(QJsonObject object)
{
QStringList keys = object.keys();
QString out;
for(int i = 0 ; i < keys.size() ; i++)
{
appendKey(keys[i],&out);
out.append(convertQJsonValue2String(object[keys[i]]));
if(i != keys.size() - 1)
out.append(",");
}
return out.prepend("{").append("}");
}
void JsonObject::appendKey(QString key, QString *out)
{
out->append("\"");
out->append(key);
out->append("\"");
out->append(":");
}
QString JsonObject::convertQJsonValue2String(QJsonValue value)
{
switch(value.type())
{
case QJsonValue::Null:
return QString("null");
break;
case QJsonValue::Bool:
return QString("%1").arg(value.toBool());
break;
case QJsonValue::Double:
return QString("%1").arg(value.toDouble());
break;
case QJsonValue::String:
return value.toString().prepend("\"").append("\"");
break;
case QJsonValue::Object:
return convertQJsonObject2String(value.toObject());
break;
case QJsonValue::Array:
return convertQJsonArray2String(value.toArray());
break;
case QJsonValue::Undefined:
return QString();
break;
}
return QString();
}
QString JsonObject::convertQJsonArray2String(QJsonArray array)
{
QString out;
for(int i = 0 ; i < array.size() ; i++)
{
QJsonValue value = array.at(i);
out.append(convertQJsonValue2String(value));
if(i != (array.size() - 1))
out.append(",");
}
return out.prepend("[").append("]");
}
这里的问题是我里面有 QJsonObject
而我的 converQJSonObject2String(QJsonObject object)
仍然没有那个顺序。
最佳答案
对我来说,这看起来像是您正在尝试将 json 用于它不应该做的事情。 Json 没有规范的表示形式,因此即使您设法正确排序键,您仍然可能会遇到问题。 (具有非 ASCII 字符的键、空格差异、...)
虽然确实有可能实现您正在寻找的目标(我建议使用提供这种可能性的另一个库),但请尝试退后一步,思考您要实现的目标。
是否可以直接从服务器获取您收到的 json 的哈希值?
关于c++ - 如何按顺序获取 QJsonObject 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39181796/
我是 JSON 的新手,我开始尝试使用它,但我根本无法保存任何 QJsonObject 或 QJsonArrays。我做对了吗,如果我想获得我的 QjsonObject 的 Json 格式,我必须序列
QJsonObject 不正常返回值。 json {"response":{"header":{"resultCode":"0000","resultMsg":"OK"},"body":{"items
在我的应用程序中,我使用 json 对象从远程数据库获取结果。通常响应字符串如下所示: { status:"ok", data: [ { field1:"value1"
我有一个我加载的 json 对象: QJsonObject json = CommonToolkit::Types::LoadJson(config); 这是json文件的部分内容: { "confi
与此链接相反,如何列出y和value的值: Qt JsonObjects and initializer lists -- deeper than one level? QJsonObject o {
我想在 Qt 中使用 Json,我在 QJsonObject 中的数据必须以某种特定的顺序排列,因为我们有一些通过 token 和获取 Json 哈希的确认方法。 因为 QJsonObject 按字母
我想以这种格式生成一个 qjsonstring: {"id": 1, "params":[1,2,3]} 但我不知道如何将多个值 [1,2,3] 添加到键“params” 这是我的代码: QJson
有一个QJsonObject { "a":"...", "b":"...", "c":"..." } 有没有一种方法可以检查这个对象是否
我想将多个 QJsonObject 添加到 QJsonDocument。这可能吗? 应该是这样的: [ { "objID": "obj1" //... Some
我正在编写几个测试函数,因为这是我第一次使用 Qt 并试图了解我开发最终项目所需的部分。以下是功能: #include "money.h" #include "ui_money.h" #include
我有一个 QJsonObject 数据并想转换为 QString。我怎样才能做到这一点?在Qt中搜索帮助,它只能将QJsonObject转换为QVariantMap ... 提前致谢。 最佳答案 记得
我有: QJsonObject obj1({"bla" : "lab"}) QJsonObject obj2({"bla2" : "lab2"}) 我需要: QJsonObject obj3({"bl
假设我有一个名为 groupBoxFlags(JSON 名称:flags)的 checkable QGroupBox,它有四个 QCheckBox将 checkBoxFlag1 命名为 checkBo
我正在尝试创建一个 json 文件,在其中我将 QjsonObjects 插入到唯一的一个 QJsonArray 中,我得到的是每个 QjsonObject 都在一个独立的 QJsonArray 中,
我对 Qt 很陌生,我想做一个非常简单的操作:我必须获得以下JSonObject: { "Record1" : "830957 ", "Properties" : [{
我想向 QJsonDocument 添加多个 QJsonObject 而不是 QJsonArray。这可能吗?它应该看起来像这样: { "Obj1" : { "objID":
是否可以使用 long long 作为 QJsonObject 的值?我被迫将我的 API 从 JSON 更改为 XML,因为我得到的 1 个字段有 BigInt 值,显然我无法从中提取大数字QJso
json 层次结构中任何级别的键,我如何在不知道路径中确切键的情况下找到该键? 最佳答案 通常,这可以通过递归函数(调用自身的函数)来解决。我们首先将文档的对象传递给它,然后检查对象的键。如果没有找到
作为 QJSValue 上的 qt 文档, QJsonObject不能隐式转换为 QJSValue , 我想用 QJSEngine 调用一个 javascript 函数在 C++ 中,参数应使用 QL
所以我有: QJsonArray nodeCollection; nodeCollection.push_back(ListElements(program, "title", "lang")); 我
我是一名优秀的程序员,十分优秀!