0
나는 코드가있다. 내가 알아 낸rapidjason을 사용하여 루트에서 배열을 파싱하는 방법
rapidjson/include/rapidjson/document.h:1700: int rapidjson::GenericValue<Encoding, Allocator>::GetInt() const [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]: Assertion `data_.f.flags & kIntFlag' failed.
한 가지 방법은 StringBuffer를을 받아 작가를 사용하는 것입니다 :이 실행할 때
Document d;
const char* json = "[{\"k1\":\"1\"}, {\"k1\":\"2\"}]";
d.Parse(json);
for (SizeType i = 0; i < d.Size(); i++) {
cout << d[i]["k1"].GetInt() << "\n";
}
나는 오류가 아래 얻을. 배열 요소 중첩 된 문자열을 나에게 돌려 준다.
rapidjson::StringBuffer sb;
rapidjson::Writer<rapidjson::StringBuffer> writer1(sb);
d[0].Accept(writer1);
std::cout << sb.GetString() << std::endl;
위 대안의 출력은 다음과 같습니다
{"k1":"1"}
내가 다시 구문 분석하기 위의 문자열 출력을 피드백 할 수있다. 이것을 직접 파싱 할 수있는 방법이 있습니까?
추 신 : 쉬운 인터페이스가있는 C++ 용 jason 파서가 있습니까?
"1"- int로하지 않는 경우 - 이는 인 문자열은'd [i] [ "k1"]. GetString()'을 사용하여 가져와야합니다. Int는 따옴표없이 json으로 표현됩니다. json에서 "1"과 같은 문자열을 추출한 후 stoi를 사용하여 int로 변환 할 수 있습니다. –