Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

I have following code:

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);
}

If all boolMarkers are false the out_string is { "somevalue" : null } but I want it to be an empty array: { "somevalue" : [ ] }

Does anybody know how to achieve this?

Thank you very much!

share|improve this question
add comment

3 Answers

up vote 10 down vote accepted

You can do it also this way:

jsonRootValue["emptyArray"] = Json::Value(Json::arrayValue);
share|improve this answer
    
why not just jsonRootValue["emptyArray"] = Json::arrayValue; –  Konstantin K May 12 at 22:44
add comment

You can do this by defining the Value object as an "Array object" (by default it makes it as an "object" object which is why your member becomes "null" when no assignment made, instead of [] )

So, switch this line:

 Json::Value jsonValue;
 myMethod(jsonValue);

with this:

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

And voila! Note that you can change "arrayValue" to any type you want (object, string, array, int etc.) to make an object of that type. As I said before, the default one is "object".

share|improve this answer
    
Thank you Ahmet but this is exactly the same as user609441 already stated with a little more text. –  Martin Meeser Mar 5 '13 at 11:18
    
Wanted to explain the reasons as well ^_^ –  Ahmet Ipkin Mar 7 '13 at 7:29
add comment

OK I got it. It is a little bit annoying but it is quite easy after all. To create an empty json array with jsoncpp:

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

Output via writer will be:

{ "emptyArray" = [] }         
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.