Save Method
Saves the modified JSON document.
procedure Save();
Remarks
This method saves the modified JSON data. This is used after editing a previously loaded JSON document.
After loading a JSON document with Parse the document may be editted. The component supports inserting new values, renaming or overwriting existing values, and removing values. After editting is complete call Save to output the updated JSON document.
The following methods are applicable when modifying a JSON document:
- InsertProperty
- InsertValue
- Remove
- Save
- SetName
- SetValue
When Save is called the modified JSON is written to the specified output location.
Output Properties
The component will determine the destination of the output based on which properties are set.
The order in which the output properties are checked is as follows:
- OutputFile
- OutputData: The output data is written to this property if no other destination is specified.
Inserting New Values
To insert new values in a JSON document first load the existing document with Parse. Next set XPath to the sibling or parent of the data to be inserted. Call InsertProperty or InsertValue and pass the ValueType and Position parameters to indicate the type of data being inserted and the position.
The ValueType parameter of the above methods specifies the type of the value. Possible values are:
- 0 (Object)
- 1 (Array)
- 2 (String)
- 3 (Number)
- 4 (Bool)
- 5 (Null)
- 6 (Raw)
The Position parameter of the above methods specifies the position of Value. Possible values are:
- 0 (Before the current element)
- 1 (After the current element)
- 2 (The first child of the current element)
- 3 (The last child of the current element)
For example:
Given the following JSON:
{
"store"
: {
"books"
: [
{
"category"
:
"reference"
,
"author"
:
"Nigel Rees"
,
"title"
:
"Sayings of the Century"
,
},
{
"category"
:
"fiction"
,
"author"
:
"Evelyn Waugh"
,
"title"
:
"Sword of Honour"
,
}
]
}
}
Insert a new property "price" for each book:
json.XPath =
"/json/store/books/[1]"
;
json.InsertProperty(
"price"
,
"8.95"
, 3, 3);
//3 - Number, 3 - Last Child
json.XPath =
"/json/store/books/[2]"
;
json.InsertProperty(
"price"
,
"12.99"
, 3, 3);
//3 - Number, 3 - Last Child
json.Save();
Produces the JSON:
{
"store"
: {
"books"
: [
{
"category"
:
"reference"
,
"author"
:
"Nigel Rees"
,
"title"
:
"Sayings of the Century"
,
"price"
: 8.95
},
{
"category"
:
"fiction"
,
"author"
:
"Evelyn Waugh"
,
"title"
:
"Sword of Honour"
,
"price"
: 12.99
}
]
}
}
To add a new book to the array:
json.XPath =
"/json/store/books"
;
json.InsertValue(
""
, 0, 3);
//0 - Object, 3 - Last Child
json.XPath =
"/json/store/books/[3]"
;
json.InsertProperty(
"category"
,
"fiction"
, 2, 3);
//2 - String, 3 - Last Child
json.InsertProperty(
"author"
,
"Herman Melville"
, 2, 3);
//2 - String, 3 - Last Child
json.InsertProperty(
"title"
,
"Moby Dick"
, 2, 3);
//2 - String, 3 - Last Child
json.InsertProperty(
"price"
,
"8.99"
, 3, 3);
//3 - Number, 3 - Last Child
json.Save();
Produces the JSON:
{
"store"
: {
"books"
: [
{
"category"
:
"reference"
,
"author"
:
"Nigel Rees"
,
"title"
:
"Sayings of the Century"
,
"price"
: 8.95
},
{
"category"
:
"fiction"
,
"author"
:
"Evelyn Waugh"
,
"title"
:
"Sword of Honour"
,
"price"
: 12.99
},
{
"category"
:
"fiction"
,
"author"
:
"Herman Melville"
,
"title"
:
"Moby Dick"
,
"price"
: 8.99
}
]
}
}
To add a new array property to each book:
json.XPath =
"/json/store/books/[1]"
;
json.InsertProperty(
"tags"
,
""
, 1, 2);
//1 - Array, 2 - First Child
json.XPath =
"/json/store/books/[1]/tags"
;
json.InsertValue(
"quotes"
, 2, 3);
//2 - String, 3 - Last Child
json.InsertValue(
"british"
, 2, 3);
//2 - String, 3 - Last Child
json.XPath =
"/json/store/books/[2]"
;
json.InsertProperty(
"tags"
,
""
, 1, 2);
//1 - Array, 2 - First Child
json.XPath =
"/json/store/books/[2]/tags"
;
json.InsertValue(
"trilogy"
, 2, 3);
//2 - String, 3 - Last Child
json.InsertValue(
"war"
, 2, 3);
//2 - String, 3 - Last Child
json.XPath =
"/json/store/books/[3]"
;
json.InsertProperty(
"tags"
,
""
, 1, 2);
//1 - Array, 2 - First Child
json.XPath =
"/json/store/books/[3]/tags"
;
json.InsertValue(
"classic"
, 2, 3);
//2 - String, 3 - Last Child
json.InsertValue(
"whales"
, 2, 3);
//2 - String, 3 - Last Child
json.Save();
Producse the JSON:
{
"store"
: {
"books"
: [
{
"tags"
: [
"quotes"
,
"british"
],
"category"
:
"reference"
,
"author"
:
"Nigel Rees"
,
"title"
:
"Sayings of the Century"
,
"price"
: 8.95
},
{
"tags"
: [
"trilogy"
,
"war"
],
"category"
:
"fiction"
,
"author"
:
"Evelyn Waugh"
,
"title"
:
"Sword of Honour"
,
"price"
: 12.99
},
{
"tags"
: [
"classic"
,
"whales"
],
"category"
:
"fiction"
,
"author"
:
"Herman Melville"
,
"title"
:
"Moby Dick"
,
"price"
: 8.99
}
]
}
}
Removing Values
To remove existing values set XPath and call the Remove method. Continuing with the example above, to remove
the first book:
json.XPath =
"/json/store/books/[1]"
;
json.Remove();
json.Save();
Produces the JSON:
{
"store"
: {
"books"
: [
{
"tags"
: [
"trilogy"
,
"war"
],
"category"
:
"fiction"
,
"author"
:
"Evelyn Waugh"
,
"title"
:
"Sword of Honour"
,
"price"
: 12.99
},
{
"tags"
: [
"classic"
,
"whales"
],
"category"
:
"fiction"
,
"author"
:
"Herman Melville"
,
"title"
:
"Moby Dick"
,
"price"
: 8.99
}
]
}
}
To remove the "category" properties from each book:
json.XPath =
"/json/store/books/[1]/category"
;
json.Remove();
json.XPath =
"/json/store/books/[2]/category"
;
json.Remove();
json.Save();
{
"store"
: {
"books"
: [
{
"tags"
: [
"trilogy"
,
"war"
],
"author"
:
"Evelyn Waugh"
,
"title"
:
"Sword of Honour"
,
"price"
: 12.99
},
{
"tags"
: [
"classic"
,
"whales"
],
"author"
:
"Herman Melville"
,
"title"
:
"Moby Dick"
,
"price"
: 8.99
}
]
}
}
Updating Existing Names and Values
The SetName and SetValue methods may be used to modify existing names and values. Continuing with the JSON directly above, to rename "tags" to "meta" and update values within the array and prices:
//Rename "tags" to "meta" for 1st book
json.XPath =
"/json/store/books/[1]/tags"
;
json.SetName(
"meta"
);
//Update Price
json.XPath =
"/json/store/books/[1]/price"
;
json.SetValue(
"13.99"
, 3);
//3 - Number
//Rename "tags" to "meta" for 2nd book
json.XPath =
"/json/store/books/[2]/tags"
;
json.SetName(
"meta"
);
//Update tag "whales" to "revenge"
json.XPath =
"/json/store/books/[2]/meta/[2]"
;
json.SetValue(
"revenge"
, 2);
//2 - String
//Update Price
json.XPath =
"/json/store/books/[2]/price"
;
json.SetValue(
"9.99"
, 3);
//3 - Number
json.Save();
Produces the JSON:
{
"store"
: {
"books"
: [
{
"meta"
: [
"trilogy"
,
"war"
],
"author"
:
"Evelyn Waugh"
,
"title"
:
"Sword of Honour"
,
"price"
: 13.99
},
{
"meta"
: [
"classic"
,
"revenge"
],
"author"
:
"Herman Melville"
,
"title"
:
"Moby Dick"
,
"price"
: 9.99
}
]
}
}