微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用C++和rapidjson处理JSON信息

如何解决用C++和rapidjson处理JSON信息

我有这个 JSON:

[{ "Country": "AFG","Indicator": "NGDP_R","Value": 183.26,"Year": 2002 },{repeated struct across 3mb .json}]

我想将“国家/地区”值存储到 std::vector<string> countries; 中,但我不知道如何(我想计算我的 JSON 中有多少个不同的国家/地区)。到目前为止,我所做的是:

std::ifstream ifs("../data/data.json");
if (!ifs.is_open())  {
    std::cerr << "Could not open file for reading!\n";
    return EXIT_FAILURE;
}
IStreamWrapper isw(ifs);
Document doc;
doc.ParseStream(isw);
StringBuffer buffer;
Writer<StringBuffer> writer(buffer);
doc.Accept(writer);
if (doc.HasParseError()){
  std::cout << "Error  : " << doc.GetParseError()  << '\n' << "Offset : " << 
  doc.GetErrorOffset() << '\n';
  return EXIT_FAILURE;
}

请有人帮助我如何处理这些信息,如果可以,请向我解释如何保存到这样的二维数组中?:

{ "Country": "AFG","Year": 2002 }
{ "Country": "AFG","Value": 198.736,"Year": 2003 }
{ "Country": "AFG","Value": 200.069,"Year": 2004 }
{ "Country": "AFG","Value": 223.737,"Year": 2005 }
{ "Country": "AFG","Value": 235.731,"Year": 2006 }
{ "Country": "AFG","Value": 267.177,"Year": 2007 }...

解决方法

关于如何迭代的示例(数组和对象的 json 值具有迭代器)

constexpr std::string_view stringJson = R"([ {"k1": "v1","k2": "v2"},{"k1": "v1","k2": "v2"} ])";
rapidjson::Document documentJson;                                        // Create root rapidjson object
documentJson.Parse( stringJson.data() );

if( documentJson.IsArray() == true )                                     // Yes,we know it is an array :)
{
   for( const auto& itArray : documentJson.GetArray() )                  // iterate array
   {
      if( itArray.IsObject() == true )                                   // They are all objects
      {
         for( const auto& itObject : itArray.GetObject()  )
         {
            const auto& _name = itObject.name;                           // get name
            const auto& _value = itObject.value;                         // get value
            std::cout << _name.GetString() << " : " << _value.GetString() << "\n";// dump it
         }
      }
   }
}

Here is one tutorial。点击 RapidJSON 章节

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。