Tôi là người mới đến c++
. Cách dễ nhất để tuần tự hóa và deserialize dữ liệu của loại std::Map
bằng cách sử dụng boost
là gì. Tôi đã tìm thấy một số ví dụ với việc sử dụng PropertyTree
nhưng chúng không rõ ràng đối với tôi.Nối tiếp và deserializing json với tăng
55
A
Trả lời
82
Lưu ý rằng property_tree
diễn giải các khóa dưới dạng đường dẫn, ví dụ: đặt cặp "a.b" = "z" sẽ tạo một JSON "{" a ": {" b ":" z "}}, không phải là {" a.b ":" z "}. Nếu không, sử dụng property_tree
là không đáng kể. Đây là một ví dụ nhỏ.
#include <sstream>
#include <map>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
using boost::property_tree::ptree;
using boost::property_tree::read_json;
using boost::property_tree::write_json;
void example() {
// Write json.
ptree pt;
pt.put ("foo", "bar");
std::ostringstream buf;
write_json (buf, pt, false);
std::string json = buf.str(); // {"foo":"bar"}
// Read json.
ptree pt2;
std::istringstream is (json);
read_json (is, pt2);
std::string foo = pt2.get<std::string> ("foo");
}
std::string map2json (const std::map<std::string, std::string>& map) {
ptree pt;
for (auto& entry: map)
pt.put (entry.first, entry.second);
std::ostringstream buf;
write_json (buf, pt, false);
return buf.str();
}
Các vấn đề liên quan
- 1. Nối tiếp nhị phân so với JSON so với xml
- 2. Deserializing JSON trong WP7
- 3. Json.NET: deserializing Nested Json
- 4. Nối tiếp Json trong C#
- 5. Nối tiếp tăng tiếp trực tiếp vào mảng char
- 6. Nối tiếp Xml so với "Đúng" và "Sai"
- 7. Kết nối MongoDB tiếp tục tăng
- 8. Nối tiếp một POJO với JSON bằng GSON
- 9. JSON Nối tiếp mô hình Django với simplejson
- 10. Nối tiếp đối tượng javascript vào json và quay lại
- 11. Deserializing JSON vào đối tượng
- 12. Nối tiếp lớp thể hiện thành JSON
- 13. Nối tiếp một đối tượng vào JSON
- 14. deserializing JSON với nhiều loại trong một lĩnh vực
- 15. Deserializing một mảng JSON đơn giản với DataContractJsonSerializer
- 16. Deserializing JSON với mảng được lập chỉ mục trong C#
- 17. Deserializing XML thành JSON mà không sử dụng hàm XmlDocument.Loadxml()
- 18. Trình nghe và nối tiếp cổng nối tiếp Linux?
- 19. Nối tiếp một đối tượng thành JSON, XML, YAML?
- 20. Nối tiếp một danh sách Scala thành JSON trong Play2
- 21. Nối tiếp so với SPI
- 22. Nối tiếp và phiên bản
- 23. Deserializing Chrome Đánh dấu dữ liệu JSON trong C#
- 24. deserializing biến Loại JSON mảng sử dụng DataContractJsonSerializer
- 25. Json trống mảng deserializing như null trong MVC
- 26. Deserializing câu trả lời JSON có chứa các thuộc tính xung đột với từ khóa
- 27. RestSharp không deserializing JSON Object List, luôn luôn Null
- 28. JsonMaxLength ngoại lệ trên deserializing json lớn các đối tượng
- 29. Nối tiếp chuỗi JSON để khớp với chức năng dịch vụ WCF Tham số
- 30. Bỏ qua phần tử gốc trong khi deserializing json
Tôi đã thử điều này (sử dụng Boost 1.57.0 nhiều lần hoặc ít hơn lần đầu tiên) và VS 2013 cho tôi cảnh báo C4512 (không thể tạo toán tử gán). Làm thế nào để giải quyết điều đó, ngoài việc ngăn chặn các cảnh báo? – Dabbler
@Dabbler: Tôi không nhận được cảnh báo nào với GCC 4.9.1 ('g ++ -c -Wall -O2 -std = C++ 11 pt.cpp'). Không có VS. Cũng từ googling tôi muốn nói cảnh báo đến từ một nơi nào đó sâu hơn, bởi vì không có lớp nào được định nghĩa trong mã đã cho. Vì vậy, để trả lời câu hỏi của bạn, tôi nghĩ bạn nên cô lập các cảnh báo, kiểm tra xem nó được sản xuất bởi mã Boost trong property_tree, và nếu có, sau đó tìm kiếm các vấn đề Boost tương ứng, nộp một vấn đề mới nếu không ai đã làm nó được nêu ra. cf. http://www.boost.org/development/bugs.html – ArtemGr
Câu trả lời hay. Làm thế nào về mảng? – ar2015