2012-11-08 43 views
14

Tôi đã mã sau:Tạo mảng json trống với 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); 
} 

Nếu tất cả boolMarkers là sai sự out_string là { "somevalue": null} nhưng tôi muốn nó là một mảng trống: { "somevalue" : []}

Có ai biết cách đạt được điều này không?

Cảm ơn bạn rất nhiều!

Trả lời

27

Bạn có thể làm điều đó cũng theo cách này:

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

lý do tại sao không chỉ 'jsonRootValue [" emptyArray "] = Json :: arrayValue'; –

+1

Tôi nghĩ có lẽ khi tôi đăng câu hỏi này - hai năm trước khi bình luận của bạn - đó là điều không thể. –

3

OK tôi hiểu rồi. Đó là một chút khó chịu nhưng nó là khá dễ dàng sau khi tất cả. Để tạo một mảng json trống với jsoncpp:

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

Output qua nhà văn sẽ là:

{ "emptyArray" = [] }   
6

Bạn có thể làm điều này bằng cách xác định đối tượng Value là một đối tượng "Array" (theo mặc định nó làm cho nó trở thành đối tượng "đối tượng") là lý do thành viên của bạn trở thành "null" khi không gán được, thay vì [])

Vì vậy, chuyển sang dòng này:

Json::Value jsonValue; 
myMethod(jsonValue); 

với điều này:

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

Và thì đấy! Lưu ý rằng bạn có thể thay đổi "arrayValue" thành bất kỳ kiểu nào bạn muốn (đối tượng, chuỗi, mảng, int, v.v.) để tạo một đối tượng thuộc loại đó. Như tôi đã nói trước đây, mặc định là "đối tượng".

+0

Cảm ơn bạn Ahmet nhưng điều này là chính xác giống như user609441 đã được nêu với nhiều văn bản hơn một chút. –

+1

Muốn giải thích lý do cũng^_ ^ –

Các vấn đề liên quan