File: add.md

package info (click to toggle)
jsoncons 1.3.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 17,584 kB
  • sloc: cpp: 136,382; sh: 33; makefile: 5
file content (165 lines) | stat: -rw-r--r-- 4,301 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
### jsoncons::jsonpointer::add

Adds a value to an object or inserts it into an array at the target location.
If a value already exists at the target location, that value is replaced.

```cpp
#include <jsoncons_ext/jsonpointer/jsonpointer.hpp>

template <typename Json,typename T>
void add(Json& target, 
         const basic_json_pointer<Json::char_type>& location, 
         T&& value, 
         bool create_if_missing = false);                      (1) (since 0.167.0)

template <typename Json,typename T>
void add(Json& target, 
         const basic_json_pointer<Json::char_type>& location, 
         T&& value, 
         std::error_code& ec);                                 (2) (since 0.167.0)

template <typename Json,typename T>
void add(Json& target, 
         const basic_json_pointer<Json::char_type>& location, 
         T&& value, 
         bool create_if_missing, 
         std::error_code& ec);                                 (3) (since 0.167.0)

template <typename Json,typename StringSource,typename T>
void add(Json& target, 
         const StringSource& location_str, 
         T&& value, 
         bool create_if_missing = false);                      (4)

template <typename Json,typename StringSource,typename T>
void add(Json& target, 
         const StringSource& location_str, 
         T&& value, 
         std::error_code& ec);                                 (5)

template <typename Json,typename StringSource,typename T>
void add(Json& target, 
         const StringSource& location_str, 
         T&& value, 
         bool create_if_missing, 
         std::error_code& ec);                                 (6) (since 0.162.0)
```

Inserts a value into the target at the specified location, or if the location specifies an object member that already has the same key, assigns the new value to that member

- If `location` specifies an array index, a new value is inserted into the array at the specified index.

- If `location` specifies an object member that does not already exist, a new member is added to the object.

- If `location` specifies an object member that does exist, that member's value is replaced.

#### Parameters
<table>
  <tr>
    <td>target</td>
    <td>JSON value</td> 
  </tr>
  <tr>
    <td>location</td>
    <td>A <a href="basic_json_pointer.md">basic_json_pointer</a></td> 
  </tr>
  <tr>
    <td>location_str</td>
    <td>A JSON Pointer provided as a string, string view, or C-string</td> 
  </tr>
  <tr>
    <td>value</td>
    <td>New or replacement value</td> 
  </tr>
  <tr>
    <td><code>create_if_missing</code> (since 0.162.0)</td>
    <td>Create key-object pairs when object key is missing</td> 
  </tr>
  <tr>
    <td><code>ec</code></td>
    <td>out-parameter for reporting errors in the non-throwing overload</td> 
  </tr>
</table>

#### Return value

None

### Exceptions

(1) Throws a [jsonpointer_error](jsonpointer_error.md) if `add` fails.
 
(2)-(3) Sets the out-parameter `ec` to the [jsonpointer_error_category](jsonpointer_errc.md) if `add` fails. 
 
### Examples

#### Insert or assign an object member at a location_str that already exists

```cpp
#include <jsoncons/json.hpp>
#include <jsoncons_ext/jsonpointer/jsonpointer.hpp>

using jsoncons::json;
namespace jsonpointer = jsoncons::jsonpointer;

int main()
{
    auto target = json::parse(R"(
        { "foo": "bar", "baz" : "abc"}
    )");

    std::error_code ec;
    jsonpointer::add(target, "/baz", json("qux"), ec);
    if (ec)
    {
        std::cout << ec.message() << '\n';
    }
    else
    {
        std::cout << target << '\n';
    }
}
```
Output:
```json
{"baz":"qux","foo":"bar"}
```

#### Add a value to a location_str after creating objects when missing object keys

```cpp
#include <iostream>
#include <jsoncons/json.hpp>
#include <jsoncons_ext/jsonpointer/jsonpointer.hpp>

using jsoncons::json;
namespace jsonpointer = jsoncons::jsonpointer;

int main()
{
    std::vector<std::string> keys = {"foo","bar","baz"};

    jsonpointer::json_pointer location_str;
    for (const auto& key : keys)
    {
        location_str /= key;
    }

    json doc;
    jsonpointer::add(doc, location_str, "str", true);

    std::cout << pretty_print(doc) << "\n\n";
}
```
Output:
```json
{
    "foo": {
        "bar": {
            "baz": "str"
        }
    }
}
```