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
... 

すぐ。

これはデータ型の非互換性が原因であることはわかっていますが、この値にアクセスする方法を理解できずに 2 ~ 3 時間費やしました。

ボリューム、ID、および値に対応するこれらの値にアクセスするにはどうすればよいですか?

4

0 に答える 0