1 #include <iostream> 2 #include <nlohmann/json.hpp> 3 4 using json = nlohmann::json; 5 main()6int main() 7 { 8 // create a JSON value 9 const json j = 10 { 11 {"number", 1}, {"string", "foo"}, {"array", {1, 2}} 12 }; 13 14 // read-only access 15 16 // output element with JSON pointer "/number" 17 std::cout << j.at("/number"_json_pointer) << '\n'; 18 // output element with JSON pointer "/string" 19 std::cout << j.at("/string"_json_pointer) << '\n'; 20 // output element with JSON pointer "/array" 21 std::cout << j.at("/array"_json_pointer) << '\n'; 22 // output element with JSON pointer "/array/1" 23 std::cout << j.at("/array/1"_json_pointer) << '\n'; 24 25 // out_of_range.109 26 try 27 { 28 // try to use an array index that is not a number 29 json::const_reference ref = j.at("/array/one"_json_pointer); 30 } 31 catch (json::parse_error& e) 32 { 33 std::cout << e.what() << '\n'; 34 } 35 36 // out_of_range.401 37 try 38 { 39 // try to use a an invalid array index 40 json::const_reference ref = j.at("/array/4"_json_pointer); 41 } 42 catch (json::out_of_range& e) 43 { 44 std::cout << e.what() << '\n'; 45 } 46 47 // out_of_range.402 48 try 49 { 50 // try to use the array index '-' 51 json::const_reference ref = j.at("/array/-"_json_pointer); 52 } 53 catch (json::out_of_range& e) 54 { 55 std::cout << e.what() << '\n'; 56 } 57 58 // out_of_range.403 59 try 60 { 61 // try to use a JSON pointer to an nonexistent object key 62 json::const_reference ref = j.at("/foo"_json_pointer); 63 } 64 catch (json::out_of_range& e) 65 { 66 std::cout << e.what() << '\n'; 67 } 68 69 // out_of_range.404 70 try 71 { 72 // try to use a JSON pointer that cannot be resolved 73 json::const_reference ref = j.at("/number/foo"_json_pointer); 74 } 75 catch (json::out_of_range& e) 76 { 77 std::cout << e.what() << '\n'; 78 } 79 } 80