有没有人在Visual Studio 2010中使用过C++中的JSON

问题描述:

我以前只在Visual Studio开发环境中使用过C++。现在我被要求使用JSON接收和发送数据。有没有人在Visual Studio 2010中使用过C++中的JSON

我已经搜索了互联网,但无法找到C++在Visual Studio中使用的JSON的任何示例。如果任何人在Visual Studio 2010中使用C++中的JSON,请传递链接。

+0

试试这个:[Json11](https://github.com/dropbox/json11)或[PicoJSON](https://github.com/kazuho/picojson)。没有提升。 – Sergo

如果你要安装boost :: spirit,你可以使用这个lib JSON Spirit。与VS一起工作就像一个魅力。

UPDATE包括JSON精神目录,并使用

#include <json_spirit/json_spirit.h> 
#include <json_spirit/json_spirit_reader_template.h> 
#include <json_spirit/json_spirit_writer_template.h> 
+0

如何安装boost :: spirit,可以请指导吗? – Dany

+0

只需从这里下载http://boost-spirit.com/home/,并包括标题 –

+2

我下载了他的项目给出的链接JSON Spirit.It包括五个项目,你可以告诉我,请哪一个需要的JSON对象作为我从我的C#DLL的一个方法获得的参数解析它并将其存储在一个文件中。 – Dany

JsonCpp是一个C++ JSON解析器,它根据它们的README构建在VS中。

+0

我没有工作 – Dany

+0

不支持unicode正确 – daisy

Apache Thrift支持JSON。这是一个不错的选择,因为除了JSON之外,您还可以获得传输机制(TCP套接字等)并可选地在多线程环境中。

Here你可以找到关于JSON for windows的信息。

节俭是多平台,所以它应该与VS一起工作得很好。

您可以尝试rapidjson

它体积小,速度快,本机支持VC2008/2010,并具有最小的依赖关系(例如,没有BOOST,甚至没有STL)。

它可以使用SAX或DOM样式API解析和生成JSON。

Json11 - 是一个用于C++ 11的小型JSON库,提供JSON解析和序列化。

库提供的核心对象是json11 :: Json。 Json对象表示任何JSON值:null,bool,number(int或double),string(std :: string),array(std :: vector)或object(std :: map)。

Json对象的作用类似于值。他们可以分配,复制,移动,比较平等或秩序,等等。还有辅助方法Json :: dump,将Json序列化为字符串,以及Json :: parse(static)将std :: string解析为Json对象。

实施例:

 const string simple_test = 
      R"({"k1":"v1", "k2":42, "k3":["a",123,true,false,null]})"; 
     string err; 
     auto json = Json::parse(simple_test, err); 
     std::cout << "k1: " << json["k1"].string_value() << "\n"; 

PicoJSON - 为下用下述性能的微小JSON解析器/串行化++:

  • 头文件仅
  • 没有外部的依赖(仅使用标准C++库)
  • STL-frendly(数组是repr通过使用std ::矢量esented,对象的std ::地图)
  • 同时提供拉接口和流(基于事件的)接口

实施例:

 std::string json1 = R"({ "k1":"v1", "k2" : 42, "k3" : ["a",123,true,false,null] })"; 
     picojson::value v; 
     std::string err1 = picojson::parse(v, json1); 
     const picojson::object& o = v.get<picojson::object>(); 
     for (picojson::object::const_iterator i = o.begin(); i != o.end(); ++i) { 
      std::cout << i->first << " " << i->second << std::endl; 
     } 

在Visual两者容易地使用带有标准libriries的工作室(没有任何其他依赖项)。