diff options
author | miloyip <miloyip@gmail.com> | 2021-03-24 11:51:12 +0300 |
---|---|---|
committer | miloyip <miloyip@gmail.com> | 2021-03-24 11:51:12 +0300 |
commit | 3d77d11e28aaa32bd8c8a35b2d306a586c953865 (patch) | |
tree | 5b67d850f73ae26086eb0a54c81855d673855a82 /example | |
parent | 1c2c8e085a8b2561dff17bedb689d2eb0609b689 (diff) |
add traverse as pointer example
Diffstat (limited to 'example')
-rw-r--r-- | example/traverseaspointer.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/example/traverseaspointer.cpp b/example/traverseaspointer.cpp new file mode 100644 index 00000000..7e0c8992 --- /dev/null +++ b/example/traverseaspointer.cpp @@ -0,0 +1,39 @@ +#include "rapidjson/document.h" +#include "rapidjson/filereadstream.h" +#include "rapidjson/pointer.h" +#include "rapidjson/stringbuffer.h" +#include <iostream> + +using namespace rapidjson; + +void traverse(const Value& v, const Pointer& p) { + StringBuffer sb; + p.Stringify(sb); + std::cout << sb.GetString() << std::endl; + + switch (v.GetType()) { + case kArrayType: + for (SizeType i = 0; i != v.Size(); ++i) + traverse(v[i], p.Append(i)); + break; + case kObjectType: + for (Value::ConstMemberIterator m = v.MemberBegin(); m != v.MemberEnd(); ++m) + traverse(m->value, p.Append(m->name.GetString(), m->name.GetStringLength())); + break; + default: + break; + } +} + +int main(int, char*[]) { + char readBuffer[65536]; + FileReadStream is(stdin, readBuffer, sizeof(readBuffer)); + + Document d; + d.ParseStream(is); + + Pointer root; + traverse(d, root); + + return 0; +} |