2016-08-27 8 views
2

私は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)まだドンを持っているということですその命令はありません。

答えて

1

私にとっては、これはあなたが何かの目的でjsonを使用しようとしているようです。 Jsonは標準的な表現をしていないので、キーを正しく並べ替えることができても、まだ問題が発生する可能性があります。 (ASCII以外の文字、空白の違いなどを含むキー)

あなたが探していることは確かに可能ですが(この可能性を提供する別のライブラリを使用することをお勧めします)、あなたが達成しようとしていることについて考えてみてください。

jsonのハッシュをサーバーから直接受け取ることは可能でしょうか?

+0

json.orgでいくつかのライブラリが見つかりました...ありがとうとにかく! – mostafaTmj

+0

@mostafaTmj:素晴らしい!あなたはあなた自身の質問に答えを書いて、同じ問題を抱えている他の人があなたの解決策を見つけることができるようにします。 –

関連する問題