diff options
author | Steve Hanson <smh@uk.ibm.com> | 2021-05-20 14:20:12 +0300 |
---|---|---|
committer | Steve Hanson <smh@uk.ibm.com> | 2021-05-20 14:20:12 +0300 |
commit | 3987d82f4161b0600fee349eb9559c1be782c878 (patch) | |
tree | 9d5ea22572376ba6fb2b69c7aacab913f839c0ad /example | |
parent | bc026e3fb574411acc4f2be82177abb8b5b92202 (diff) | |
parent | 17aa824c928ea111e9b12a61e06d98335ce98f15 (diff) |
Merge branch 'master' of https://github.com/Tencent/rapidjson into id-and-ref
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; +} |