2013-10-23 1 views
3

나는 너희들에게 도움이 필요하다.C++ 맵에 JSON 객체 저장

현재 저는 Json 표준으로 포맷 된 데이터를 구문 분석하기 위해 cJSON을 사용하고 있습니다.

아래의 데이터는 데이터의 예입니다.

{ 
    "time" : {    
     "timezone" : string, 
     "ntpservers" : array<string> 
    }, 
    "datetime" : { 
     "value" : "2013-10-23 03:35:45.182042", 
     "space-custom-class" : "datetime.datetime" 
    } 
} 

제가하는 데 문제는 내가 키 값 쌍 까지 데이터를 깰지도에 저장하는 방법을 모른다는 것이다. 나는 "시간"이 키이지만 값은 사전이므로 어떻게 이것을 "시간"의 값으로 저장하고 이것이 "날짜 시간"키로가는지를 볼 수 있습니다. 일부 반복이 관련되어 있음을 알고 있지만 막혔습니다. 값은 기본 유형, 배열 또는 사전 일 수 있으므로이 값은 템플릿과 같은 일반 객체 여야합니까? 몇 가지 예가 매우 도움이 될 것입니다.

미리 도움을 청하십시오.

+0

"항목"추상화 및 다형성) 또는 cJSON을 사용하여 트리 표현을 만드는 방법을 모르는 경우. – Sigismondo

답변

4

JSON.org 당신이 사용할 수있는 목록에 많은 C++ JSON 파서 라이브러리를 가지고있다.

0

프로젝트에서 어떤 종속성을 사용할 수 있는지 잘 모릅니다. 따라서 내 대답이 받아 들여지지 않을 수 있습니다.

Qt5에는 원하는대로 JSON을 작성할 수있는 몇 가지 클래스가 있습니다. QT4를 들어

{ 
    "limit": 10, 
    "objectType": "objects.Word", 
    "query": { 
     "isInput": true, 
     "language": "en", 
     "rate": 0, 
     "to": "ru" 
    }, 
    "sort": [ 
     { 
      "direction": "desc", 
      "sortBy": "rate" 
     } 
    ] 
} 

또한 시뮬 API를 사용하여 라이브러리를 존재 :이 코드의

#include <QJsonObject> 
#include <QJsonArray> 
#include <QJsonDocument> 
#include <QDebug> 

int main(int argc, char *argv[]) 
{ 
    QJsonObject topQuery; 
    topQuery["objectType"] = QString("objects.Word"); 

    QJsonObject parameters; 
    parameters["language"] = QString("en"); 
    parameters["to"] = QString("ru"); 
    parameters["rate"] = 0; 
    parameters["isInput"] = true; 

    topQuery["query"] = parameters; 

    QJsonObject sortParameter; 
    sortParameter["sortBy"] = QString("rate"); 
    sortParameter["direction"] = QString("desc"); 

    QJsonArray sortArray; 
    sortArray.append(sortParameter); 

    topQuery["sort"] = sortArray; 
    topQuery["limit"] = 10; 

    QJsonDocument document(topQuery); 
    qDebug() << document.toJson(); 
} 

결과가 될 것입니다 : 이것은 데모 이것에 대한 작은 예입니다 http://qjson.sourceforge.net/.

이전에 stson :: map처럼 json을 만들지 않고도 C++ lib를 찾고 있었지만 Qt 변형 만 발견했습니다.

0

예, 매우 신빙성이 있습니다. 이 cJson 방법으로 할 수 있습니다 :

cJSON *current_element = NULL; 
char *current_key = NULL; 

cJSON_ArrayForEach(current_element, object) 
{ 
    current_key = current_element->string; 
    if (current_key != NULL) 
    { 
     /* do something with the key */ 
    } 
} 

참조 : https://github.com/DaveGamble/cJSON/issues/167 당신이없는 불가능의 (a 표준 : 맵에 JSON 개체를 렌더링하는 방법을 모르는 여부를 나에게 분명하지 않다