티스토리 뷰
반응형
요즘 즐겨쓰는 json 라이브러리는 rapidjson 이다.
공식 사이트
http://rapidjson.org/
주로 사용하는 나의 코드
std::string json;
json 내용
{
"hello": "world",
"t": true ,
"f": false,
"n": null,
"i": 123,
"pi": 3.1416,
"a": [1, 2, 3, 4]
}
rapidjson::Document doc;
doc.Parse(json.c_str());
if (doc.HasParseError())
return false;
doc["hello"].GetString();
doc["t"].GetBool();
doc["f"].GetBool();
doc["n"].IsNull();
doc["pi"].GetDouble();
const rapidjson::Value& valueInfo = doc["a"];
for (SizeType i = 0; i < valueInfo.Size(); i++)
{
valueInfo[i].GetInt();
}
대략 구성하고 보았더니
사용성이 쉽다.
그런데 공식 사이트가 너무 설명이 잘 되어 있다. 자세한 설명과 예제가 풍부해서 다른 것을 찾아 볼 필요가 없을 정도이다.
공식 사이트에서
배열을 반복문을 통해서 접근하는 방법이 몇가지 더 있어서 가져와서 적어 봤다.
for (Value::ConstValueIterator itr = a.Begin(); itr != a.End(); ++itr)
printf("%d ", itr->GetInt());
C++11
for (auto& v : a.GetArray())
printf("%d ", v.GetInt());
마지막으로 Change Log 가져왔다.
1.1.0 - 2016-08-25
Added
- Add GenericDocument ctor overload to specify JSON type (#369)
- Add FAQ (#372, #373, #374, #376)
- Add forward declaration header
fwd.h
- Add Library Registry manifest file (#400)
- Implement assignment operator for BigInteger (#404)
- Add comments support (#443)
- Adding coapp definition (#460)
- documenttest.cpp: EXPECT_THROW when checking empty allocator (470)
- GenericDocument: add implicit conversion to ParseResult (#480)
- Use <wchar.h> with C++ linkage on Windows ARM (#485)
- Detect little endian for Microsoft ARM targets
- Check Nan/Inf when writing a double (#510)
- Add JSON Schema Implementation (#522)
- Add iostream wrapper (#530)
- Add Jsonx example for converting JSON into JSONx (a XML format) (#531)
- Add optional unresolvedTokenIndex parameter to Pointer::Get() (#532)
- Add encoding validation option for Writer/PrettyWriter (#534)
- Add Writer::SetMaxDecimalPlaces() (#536)
- Support {0, } and {0, m} in Regex (#539)
- Add Value::Get/SetFloat(), Value::IsLossLessFloat/Double() (#540)
- Add stream position check to reader unit tests (#541)
- Add Templated accessors and range-based for (#542)
- Add (Pretty)Writer::RawValue() (#543)
- Add Document::Parse(std::string), Document::Parse(const char*, size_t length) and related APIs. (#553)
- Add move constructor for GenericSchemaDocument (#554)
- Add VS2010 and VS2015 to AppVeyor CI (#555)
- Add parse-by-parts example (#556, #562)
- Support parse number as string (#564, #589)
- Add kFormatSingleLineArray for PrettyWriter (#577)
- Added optional support for trailing commas (#584)
- Added filterkey and filterkeydom examples (#615)
- Added npm docs (#639)
- Allow options for writing and parsing NaN/Infinity (#641)
- Add std::string overload to PrettyWriter::Key() when RAPIDJSON_HAS_STDSTRING is defined (#698)
Fixed
- Fix gcc/clang/vc warnings (#350, #394, #397, #444, #447, #473, #515, #582, #589, #595, #667)
- Fix documentation (#482, #511, #550, #557, #614, #635, #660)
- Fix emscripten alignment issue (#535)
- Fix missing allocator to uses of AddMember in document (#365)
- CMake will no longer complain that the minimum CMake version is not specified (#501)
- Make it usable with old VC8 (VS2005) (#383)
- Prohibit C++11 move from Document to Value (#391)
- Try to fix incorrect 64-bit alignment (#419)
- Check return of fwrite to avoid warn_unused_result build failures (#421)
- Fix UB in GenericDocument::ParseStream (#426)
- Keep Document value unchanged on parse error (#439)
- Add missing return statement (#450)
- Fix Document::Parse(const Ch*) for transcoding (#478)
- encodings.h: fix typo in preprocessor condition (#495)
- Custom Microsoft headers are necessary only for Visual Studio 2012 and lower (#559)
- Fix memory leak for invalid regex (26e69ffde95ba4773ab06db6457b78f308716f4b)
- Fix a bug in schema minimum/maximum keywords for 64-bit integer (e7149d665941068ccf8c565e77495521331cf390)
- Fix a crash bug in regex (#605)
- Fix schema "required" keyword cannot handle duplicated keys (#609)
- Fix cmake CMP0054 warning (#612)
- Added missing include guards in istreamwrapper.h and ostreamwrapper.h (#634)
- Fix undefined behaviour (#646)
- Fix buffer overrun using PutN (#673)
- Fix rapidjson::value::Get<std::string>() may returns wrong data (#681)
- Add Flush() for all value types (#689)
- Handle malloc() fail in PoolAllocator (#691)
- Fix builds on x32 platform. #703
Changed
- Clarify problematic JSON license (#392)
- Move Travis to container based infrastructure (#504, #558)
- Make whitespace array more compact (#513)
- Optimize Writer::WriteString() with SIMD (#544)
- x86-64 48-bit pointer optimization for GenericValue (#546)
- Define RAPIDJSON_HAS_CXX11_RVALUE_REFS directly in clang (#617)
- Make GenericSchemaDocument constructor explicit (#674)
- Optimize FindMember when use std::string (#690)
728x90
반응형
댓글