CPP REST SDK JSON - 如何创建带有数组的JSON并写入文件

时间:2017-06-16 20:30:55

标签: json cpprest-sdk

我遇到了CPP REST SDK的JSON类问题。我无法确定何时使用json::valuejson::objectjson::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写入文件?

1 个答案:

答案 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"
      ]
   }
}