xref: /aosp_15_r20/external/jsoncpp/example/readFromString/readFromString.cpp (revision 4484440890e2bc6e07362b4feaf15601abfe0071)
1*44844408SAndroid Build Coastguard Worker #include "json/json.h"
2*44844408SAndroid Build Coastguard Worker #include <iostream>
3*44844408SAndroid Build Coastguard Worker #include <memory>
4*44844408SAndroid Build Coastguard Worker /**
5*44844408SAndroid Build Coastguard Worker  * \brief Parse a raw string into Value object using the CharReaderBuilder
6*44844408SAndroid Build Coastguard Worker  * class, or the legacy Reader class.
7*44844408SAndroid Build Coastguard Worker  * Example Usage:
8*44844408SAndroid Build Coastguard Worker  * $g++ readFromString.cpp -ljsoncpp -std=c++11 -o readFromString
9*44844408SAndroid Build Coastguard Worker  * $./readFromString
10*44844408SAndroid Build Coastguard Worker  * colin
11*44844408SAndroid Build Coastguard Worker  * 20
12*44844408SAndroid Build Coastguard Worker  */
main()13*44844408SAndroid Build Coastguard Worker int main() {
14*44844408SAndroid Build Coastguard Worker   const std::string rawJson = R"({"Age": 20, "Name": "colin"})";
15*44844408SAndroid Build Coastguard Worker   const auto rawJsonLength = static_cast<int>(rawJson.length());
16*44844408SAndroid Build Coastguard Worker   constexpr bool shouldUseOldWay = false;
17*44844408SAndroid Build Coastguard Worker   JSONCPP_STRING err;
18*44844408SAndroid Build Coastguard Worker   Json::Value root;
19*44844408SAndroid Build Coastguard Worker 
20*44844408SAndroid Build Coastguard Worker   if (shouldUseOldWay) {
21*44844408SAndroid Build Coastguard Worker     Json::Reader reader;
22*44844408SAndroid Build Coastguard Worker     reader.parse(rawJson, root);
23*44844408SAndroid Build Coastguard Worker   } else {
24*44844408SAndroid Build Coastguard Worker     Json::CharReaderBuilder builder;
25*44844408SAndroid Build Coastguard Worker     const std::unique_ptr<Json::CharReader> reader(builder.newCharReader());
26*44844408SAndroid Build Coastguard Worker     if (!reader->parse(rawJson.c_str(), rawJson.c_str() + rawJsonLength, &root,
27*44844408SAndroid Build Coastguard Worker                        &err)) {
28*44844408SAndroid Build Coastguard Worker       std::cout << "error" << std::endl;
29*44844408SAndroid Build Coastguard Worker       return EXIT_FAILURE;
30*44844408SAndroid Build Coastguard Worker     }
31*44844408SAndroid Build Coastguard Worker   }
32*44844408SAndroid Build Coastguard Worker   const std::string name = root["Name"].asString();
33*44844408SAndroid Build Coastguard Worker   const int age = root["Age"].asInt();
34*44844408SAndroid Build Coastguard Worker 
35*44844408SAndroid Build Coastguard Worker   std::cout << name << std::endl;
36*44844408SAndroid Build Coastguard Worker   std::cout << age << std::endl;
37*44844408SAndroid Build Coastguard Worker   return EXIT_SUCCESS;
38*44844408SAndroid Build Coastguard Worker }
39