我遇到了CPP REST SDK的JSON类问题。我无法确定何时使用json::value
,json::object
和json::array
。特别是后两者看起来非常相似。 json::array
的用法对我来说也不太直观。最后我想将JSON写入文件或至少写入stdcout,所以我可以检查它是否正确。
我使用json-spirit更容易,但由于我想稍后发出REST请求,我想我会保存字符串/ wstring madness并使用CPP REST SDK的json类。
我想要实现的是这样的JSON文件:
{
"foo-list" : [
{
"bar" : "value1",
"bob" : "value2"
}
]
}
这是我尝试过的代码:
json::value arr;
int i{0};
for(auto& thing : things)
{
json::value obj;
obj[L"bar"] = json::value::string(thing.first);
obj[L"bob"] = json::value::string(thing.second);
arr[i++] = obj;
}
json::value result;
result[L"foo-list"] = arr;
我真的需要这个额外的计数器变量i
吗?看起来相当不优雅。使用json :: array / json :: object会更好吗?如何将JSON写入文件?
答案 0 :(得分:2)
这可以帮到你:
json::value output;
output[L"foo-list"][L"bar"] = json::value::string(utility::conversions::to_utf16string("value1"));
output[L"foo-list"][L"bob"] = json::value::string(utility::conversions::to_utf16string("value2"));
output[L"foo-list"][L"bobList"][0] = json::value::string(utility::conversions::to_utf16string("bobValue1"));
output[L"foo-list"][L"bobList"][1] = json::value::string(utility::conversions::to_utf16string("bobValue1"));
output[L"foo-list"][L"bobList"][2] = json::value::string(utility::conversions::to_utf16string("bobValue1"));
如果要创建列表,如bobList
,则确实需要使用一些迭代器变量。
否则你只会获得一堆独立的变量。
输出到控制台使用
cout << output.serialize().c_str();
最后,这将导致
{
"foo-list":{
"bar":"value1",
"bob":"value2",
"bobList":[
"bobValue1",
"bobValue1",
"bobValue1"
]
}
}