私はQsonでJsonを使用したいと思います。QJsonObject
のデータは、トークンを介して確認メソッドがあり、Jsonのハッシュを取得しているので、特定の順序でなければなりません。QJsonObject値を順番に取得する方法は?
QJsonObject object;
object.insert("B","b");
object.insert("A","a");
qDebug() << QJsonDocument(object).toJson(); // this-line
が、私はこのような何かプリントアウトするために、このラインをたい:QJsonObject
以来
が、私はこのような何かが起こることをアルファベット順にそのキーと値のペアをソート
{"B":"b","A":"a"}
をが、代わりに私はこれを得る:
{
"A":"a",
"B":"b"
}
私はクラスを書かれている:
#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("]");
}
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は、ここでの問題は、私はQJsonObject
の内側と私のconverQJSonObject2String(QJsonObject object)
まだドンを持っているということですその命令はありません。
json.orgでいくつかのライブラリが見つかりました...ありがとうとにかく! – mostafaTmj
@mostafaTmj:素晴らしい!あなたはあなた自身の質問に答えを書いて、同じ問題を抱えている他の人があなたの解決策を見つけることができるようにします。 –