1

我有一个文本文件,其中包含以 JSON 格式编写的数据。数据看起来像这样——

[
   ...
    {
    "volume": 93, 
    "id": "part-30", 
    "value": 19
  }, 
  {
    "volume": 83, 
    "id": "part-31", 
    "value": 19
  }
  ...
]

在参考了这个这个之后

我已经到了可以读取以下数据结构的“名称”字段的地步。所以除了所有其他的事情,我读取这个对象的代码看起来像这样——

// read from parts list file to JSON object.
    const char* file_name2( "parts_list.txt" );
    ifstream is2( file_name2 );
    json_spirit::Value value2;
    read( is2, value2 );
    // const Object& addr_array = value.get_obj();
    vector<Value> jsonObj2 = value2.get_array();
    vector<Value>::iterator it;
    vector<RobotParts> final;

    for(it = jsonObj2.begin(); it!=jsonObj2.end(); it++)
    {
        auto valObj = it->get_obj();
        RobotParts rpObj = RobotParts();
        for(auto vo : valObj)
        {
            if(vo.name_=="volume"){
                string s = vo.value_;
            }
        }
        final.push_back(rpObj);
    }

    cout << final.size() << endl;
    return 0;

但是这里的这一行 -->vo.value_;似乎造成了很多问题。我无法弄清楚这个对象的数据类型是什么。到目前为止,我已经尝试过:

  1. 读入整数。我想因为音量有一个整数值

int i = vo.get_value< int >();

应该管用。但相反,它说

error: no member named 'get_value' in
  'json_spirit::Pair_impl<json_spirit::Config_vector<std::__1::basic_string<char> > >'
  1. 读入一个字符串,以便我可以打印出来。

字符串 s = vo.value_;

这会引发以下错误:

error: no viable conversion from 'Value_type' (aka
      'Value_impl<json_spirit::Config_vector<std::__1::basic_string<char> > >') to 'string' (aka 'basic_string<char, char_traits<char>,
      allocator<char> >')

但是,我可以通过cout << vo.name_ << endl在循环中使用来打印出 vo.name_ 。这输出:

...
volume
id
value
volume
id
value
... 

很快。

我知道这是由于数据类型不兼容,但我现在花了两三个小时无法弄清楚如何访问这个值。

如何访问对应于volume、id和value的这些值?

4

0 回答 0