2013-06-15 27 views
14

Chào bạn tôi có một tập tin có chứa một số json trông giống như:Làm thế nào tôi có thể phân tích các mảng json với C++ đẩy mạnh

{ 
    "frame": 
    { 
    "id": "0", 
    "points": 
    [ 
     [ "0.883", "0.553", "0" ], 
     [ "0.441", "0.889", "0" ], 
    ] 
    }, 
    "frame": 
    ... 
} 

Có ai biết làm thế nào để phân tích các giá trị của mảng đôi bằng C++ và thúc đẩy ptree?

Thx trước!

+0

http://www.boost.org/doc/libs/1_41_0/doc/html/property_tree/reference.html#header.boost.property_tree.json_parser_hpp – riv

+0

PTree sẽ chấp nhận nó, nhưng nghiêm chỉnh các tên thuộc tính lặp lại không phải là JSON hợp lệ. –

Trả lời

22

Sử dụng trình lặp, Lu-ca.

Trước tiên, bạn phải phân tích các tập tin:

boost::property_tree::ptree doc; 
boost::property_tree::read_json("input_file.json", doc); 

... bây giờ, bởi vì nó dường như bạn có nhiều "khung" chìa khóa trong từ điển cấp cao nhất bạn phải lặp qua chúng:

BOOST_FOREACH (boost::property_tree::ptree::value_type& framePair, doc) { 
    // Now framePair.first == "frame" and framePair.second is the subtree frame dictionary 
} 

iterating trên các hàng và cột là như nhau:

BOOST_FOREACH (boost::property_tree::ptree::value_type& rowPair, frame.get_child("points")) { 
    // rowPair.first == "" 
    BOOST_FOREACH (boost::property_tree::ptree::value_type& itemPair, rowPair.second) { 
     cout << itemPair.second.get_value<std::string>() << " "; 
    } 
    cout << endl; 
} 

tôi đã không kiểm tra mã, nhưng ý tưởng sẽ hoạt động :-)

+0

'get_value' là một hàm, vì vậy bạn cần'() '. Chưa thiết lập tăng nhưng có vẻ hợp pháp khác. – riv

+0

làm việc cho tôi với framePair.second.get_child ("điểm") như bạn đã nói và tôi phải thay đổi kiểu dữ liệu trong cout từ chuỗi kép thành chuỗi. cảm ơn vì sự giúp đỡ!! – user934801

+0

Cảm ơn, tôi đã khắc phục các sự cố bạn đã đề cập. – cube

Các vấn đề liên quan