Boost 속성 트리를 사용하여 어레이 읽기
다음과 같은 소수의 정수 배열 변수를 가진 JSON이 있습니다.
{"a": [8, 6, 2], "b": [2, 2, 1]}
다음과 같이 boost property_tree를 사용합니다.
std::stringstream ss;
boost::property_tree::ptree pt;
ss << "{\"a\": [8, 6, 2], \"b\": [2, 2, 1]}";
boost::property_tree::read_json(ss, pt);
std::vector<int> a = pt.get<std::vector<int> >("a");
이것은 동작하지 않습니다.또한 제가 시도했던 int 포인터의 변화도 없습니다.속성 트리에서 어레이를 읽는 방법은 무엇입니까?
JSON 지원, 부스트 속성 트리로 얼룩이 있습니다.
속성 트리 데이터 집합이 입력되지 않았으며 어레이를 지원하지 않습니다.따라서 다음 JSON/속성 트리 매핑이 사용됩니다.
- JSON 개체는 노드에 매핑됩니다.각 속성은 하위 노드입니다.
- JSON 어레이는 노드에 매핑됩니다.각 요소는 이름이 비어 있는 하위 노드입니다.노드에 이름 있는 자노드와 이름 없는 자노드가 모두 있는 경우 JSON 표현에 매핑할 수 없습니다.
- JSON 값은 값을 포함하는 노드에 매핑됩니다.그러나 모든 유형 정보는 손실됩니다. 숫자뿐만 아니라 리터럴 "null", "true" 및 "false"도 문자열 형식으로 매핑됩니다.
- 하위 노드와 데이터를 모두 포함하는 속성 트리 노드를 매핑할 수 없습니다.
(문서 참조)
도우미 기능을 사용하여 어레이를 반복할 수 있습니다.
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
using boost::property_tree::ptree;
template <typename T>
std::vector<T> as_vector(ptree const& pt, ptree::key_type const& key)
{
std::vector<T> r;
for (auto& item : pt.get_child(key))
r.push_back(item.second.get_value<T>());
return r;
}
int main()
{
std::stringstream ss("{\"a\": [8, 6, 2], \"b\": [2, 2, 1]}");
ptree pt;
read_json(ss, pt);
for (auto i : as_vector<int>(pt, "a")) std::cout << i << ' ';
std::cout << '\n';
for (auto i : as_vector<int>(pt, "b")) std::cout << i << ' ';
}
8 6 2
2 2 1
읽어주세요a
다음과 같이 나타냅니다.
#include <boost/foreach.hpp>
BOOST_FOREACH(boost::property_tree::ptree::value_type &v, pt.get_child("a.")) {
cout << v.second.data() << endl;
}
언급URL : https://stackoverflow.com/questions/23481262/using-boost-property-tree-to-read-int-array
'source' 카테고리의 다른 글
Angular에 몇 가지 작은 유틸리티 기능을 추가하는 방법JS 어플리케이션? (0) | 2023.02.22 |
---|---|
jQuery AJAX 폼이 두 번 제출됨 (0) | 2023.02.22 |
@JsonProperty 필드 및 getter/setter의 주석 (0) | 2023.02.18 |
React useState() 후크를 사용한 상태 개체 업데이트 및 병합 (0) | 2023.02.16 |
python에서 json 문자열을 개체로 역직렬화합니다. (0) | 2023.02.16 |