C ++:如何实现(类似)JSON

时间:2010-07-19 07:31:17

标签: c++

不确定如何解释它 - 我对C ++很陌生,但是......让我试试:

假设我有超过300个名称(0或1)的300多个名字(杰夫,杰克......)。在JS中我会使用JSON。像这样:

var people = {"person": [
              {"name": "Jeff","val": 0},
              {"name": "Jill","val": 1},
              {"name": "Jack","val": 0},
              {"name": "Jim","val": 1},
              {"name": "John","val": 0}
]}

在C ++中执行此操作的最佳方法是什么? 感谢。

3 个答案:

答案 0 :(得分:5)

如果您可以使用重复的名称,则无法使用地图,因此您可以使用以下内容:

struct Person
{
  Person( const std::string & n, int v ) : name(n), val(v) {}
  std::string name;
  int val;
};

int main()
{
std::vector<Person> people;

people.push_back( Person( "Jeff", 0 ) );
people.push_back( Person( "Jill", 1 ) );
...

}

如果你想要名字的唯一性,你可以这样做:

std::map<std::string, int> people;
people["Jeff"] = 0;
people["Jill"] = 1;

std::map<std::string, Person> people;
people["Jeff"] = Person("Jeff",0);
people["Jill"] = Person("Jill",1);

如果您经常使用此代码,可以清理重复的伪装。

template<typename K, typename V>
struct BuildMap
{
  BuildMap() : map_() {}
  BuildMap<K,V>& operator()( const K & key, const V & value )
  {
    map_[key]=value;
    return *this;
  }
  std::map<K,V> operator()() { return map_; }
  std::map<K,V> map_;
};

std::map<std::string,int> people = BuildMap<std::string,int>()
  ( "Jeff", 0 )
  ( "Jill", 1 )
  ( "John", 1 )
  ();

希望这会给你一些想法。

答案 1 :(得分:4)

看看jsoncpp - 它是一个轻量级的json解析器,这使得在c ++项目中使用json非常容易。

http://sourceforge.net/projects/jsoncpp/

然后你可以创建一个文本文件,在那里写一些json格式的条目,然后在你的c ++程序中打开这个文件。有很多关于如何用jsoncpp做的教程。

答案 2 :(得分:0)

尝试查看std :: map。

链接到这里 http://www.cplusplus.com/reference/stl/map/

它是一个类似于字典的关联容器。像这样的东西?

#include <map>
#include <string>

std::map<string,int> person;

void initPeople(){
    person["Jeff"] = 0;
    person["Jill"] = 1;
    person["Jack"] = 0;
    person["Jim"] = 1;
    person["John"] = 0;
}