2017-04-18 12 views
1

QMap 개체가 있고이를 JSON으로 변환하고 싶습니다. 나는 이것을 어떻게 성취 할 것인지 혼란 스럽다.QMap을 JSON으로 변환

은 내가 JSON에 QMap 변환 QDataStream를 사용할 수 없다는 QT 문서를 읽을 수 있지만 QDataStream 파일 변환하는 것 같다,지도를 http://doc.qt.io/qt-4.8/datastreamformat.html

// c++ 
QMap<QString, int> myMap; 
+0

당신은'QFile'을 열을 인수로 새로운'QDataStream'를 구성하는 것을 사용 '<< "연산자를 사용하여 myMap을 직렬화하십시오. – rwols

답변

4

이 자동으로 JSON 문서로 변환 할 수 있습니다 QVariantMap에지도를 변환하는 가장 쉬운 것 :

QMap<QString, int> myMap; 
QVariantMap vmap; 

QMapIterator<QString, int> i(myMap); 
while (i.hasNext()) { 
    i.next(); 
    vmap.insert(i.key(), i.value()); 
} 

QJsonDocument json = QJsonDocument::fromVariant(vmap); 

같은 일이 QJsonObject::fromVariant() 정적 인 방법을 통해, 당신이 원하는 경우 QJsonObject을 만드는 데 사용할 수 있습니다 . QJsonObject 당신이 변형 맵 단계로의 전환을 건너 뛰고 당신은지도 반복 단순히 수동으로 객체를 채울 수 있지만 :

QMap<QString, int> myMap; 
QJsonObject json; 

QMapIterator<QString, int> i(myMap); 
while (i.hasNext()) { 
    i.next(); 
    json.insert(i.key(), i.value()); 
}  
+0

JSON 트리 계층 구조를 지원하지 않습니다. 모든 노드는 하나의 레벨에 있습니다. –

+0

@DmitrySazonov -지도가 트리가 아닙니다. – dtech

+0

변형의지도가있을 때 변형은 값 또는 다른지도 일 수 있습니다. –

1

당신은 Qt는 5.5을 사용하는 경우를 이상이 QJsonDocument::fromVariant을 사용할 수 있습니다 QVariantMap으로 쉽게 변환 될 수 있습니다. 그렇지 않은 경우 QJson

QMAP 직렬화를 찾으려면 Serialization Qt 링크를 참조하십시오. 이 같은 QByteArray, 뭔가 생성자를 설정하려고 :

QByteArray serializeMap(const QMap<QString, int>& map) { 
     QByteArray buffer; 
     QDataStream stream(&buffer, QIODevice::WriteOnly); 
     out << map; 
     return out; 
    } 

이 쉽게 QString 또는 표준 : : 문자열로 변환 할 수있는 QByteArray 느릅 나무에지도를 직렬화합니다.