You use the Read…WithPath methods to read a value whose location in the JSON data is specified by a path. A path is a sequence of member name and array index, separated by a forward slash.
For example, using the previous JSON string example:
{
"name":
{
"given": "John",
"surname": "Smith"
}, . . .
The path to the "given" member value (John) is "name/given".
And still using the JSON string from the previous example:
{
. . .
"contactNo":
[
{ area: "02", no: "9378 2867", type: "landline" },
{ no: "0468 732 371", type: "mobile" }
]
The path to the area code of the first contact number is "contactNo/1/area".
Note that indexes are always 1-based, which is a standard in RDML.
Let's now put it into practice.
We want to get the value of the "given" and "surname" members:
#GivenName := #Reader.ReadStringWithPath("name/given")
#Surname := #Reader.ReadStringWithPath("name/surname")
We can also open and enter the "name" object so we don't have to repeat the "name" segment in the path:
#Reader.BeginObjectWithPath("name")
#GivenName := #Reader.ReadStringWithPath("given")
#Surname := #Reader.ReadStringWithPath("surname")
#Reader.EndObject
To get the contact number type of the first contact number:
#ContactNoType := #Reader.ReadStringWithPath("contactNo/1/type")
Or you can navigate into the first element of "contactNo" first, then get the "type" value:
#Reader.BeginObjectWithPath("contactNo/1")
#ContactNoType := #Reader.ReadStringWithPath("type")
#Reader.EndObject
Next: Read…WithName