• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <iostream>
2 #include <nlohmann/json.hpp>
3 
4 using json = nlohmann::json;
5 
main()6 int 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