2012-11-08 18 views
14

Mam następujący kod:Utwórz pustą tablicę json z jsoncpp

void MyClass::myMethod(Json::Value& jsonValue_ref) 
{ 
    for (int i = 0; i <= m_stringList.size(); i++) 
    { 
     if (m_boolMarkerList[i]) 
     { 
      jsonValue_ref.append(stringList[i]); 
     } 
    } 
} 


void MyClass::myOuterMethod() 
{ 
    Json::Value jsonRoot; 
    Json::Value jsonValue; 

    myMethod(jsonValue); 

    jsonRoot["somevalue"] = jsonValue; 
    Json::StyledWriter writer; 
    std::string out_string = writer.write(jsonRoot); 
} 

Jeśli wszystkie boolMarkers są false out_string jest { "someValue": null} ale chcę go mieć pustą tablicą: { "someValue" : []}

Czy ktoś wie, jak to osiągnąć?

Dziękuję bardzo!

Odpowiedz

27

można to zrobić również w ten sposób:

jsonRootValue["emptyArray"] = Json::Value(Json::arrayValue); 
+8

dlaczego nie tylko 'jsonRootValue [" emptyArray "] = Json :: arrayValue'; –

+1

Myślę, że może kiedy zamieściłem to pytanie - dwa lata przed twoim komentarzem - to było po prostu niemożliwe. –

3

OK Mam to. Jest to trochę denerwujące, ale mimo wszystko jest dość łatwe. Aby utworzyć pustą tablicę json z jsoncpp:

Json::Value jsonArray; 
jsonArray.append(Json::Value::null); 
jsonArray.clear(); 
jsonRootValue["emptyArray"] = jsonArray; 

Wyjście przez pisarza będą:

{ "emptyArray" = [] }   
6

Można to zrobić przez definiując obiekt Value jako "obiekt Array" (domyślnie robi to jako obiekt "object", dlatego Twój członek staje się "null", gdy nie zostało wykonane przypisanie, zamiast [])

więc przełączyć tę linię:

Json::Value jsonValue; 
myMethod(jsonValue); 

z tym:

Json::Value jsonValue(Json::arrayValue); 
myMethod(jsonValue); 

i voila! Zauważ, że możesz zmienić wartość parametru "arrayValue" na dowolny typ (obiekt, ciąg, tablica, int itp.), Aby utworzyć obiekt tego typu. Jak już powiedziałem, domyślny to "obiekt".

+0

Dziękuję Ahmet, ale to jest dokładnie to samo, co użytkownik609441, który już został napisany, z nieco większą ilością tekstu. –

+1

Chciał również wyjaśnić powody^_ ^ –