DataFlex
DataFlex
JSON Paths
See more JSON Examples
Demonstrates using "Chilkat JSON Paths" to access parts of a JSON document, or to iterate over parts.This example uses the following JSON document:
{
"nestedArray" : [
[
[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]
]
],
"nestedObject" : {
"aaa" : {
"bb1" : {
"cc1" : "c1Value",
"cc2" : "c2Value",
"cc3" : "c3Value"
},
"bb2" : {
"dd1" : "d1Value",
"dd2" : "d2Value",
"dd3" : "d3Value"
}
}
},
"mixture" : {
"arrayA" : [
{ "fruit": "apple", "animal": "horse", "job": "fireman", "colors": ["red","blue","green"] },
{ "fruit": "pear", "animal": "plankton", "job": "waiter", "colors": ["yellow","orange","purple"] },
{ "fruit": "kiwi", "animal": "echidna", "job": "astronaut", "colors": ["magenta","tan","pink"] }
]
},
"name.with.dots" : { "grain" : "oats" }
}
Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoJson
Integer iSz
Integer i
Integer j
Integer k
Integer iSzI
Integer iSzJ
Integer iSzK
Variant vObj2
Handle hoObj2
Variant vArr1
Handle hoArr1
Integer iSzArr1
String sTemp1
Integer iTemp1
Move False To iSuccess
Get Create (RefClass(cComChilkatJsonObject)) To hoJson
If (Not(IsComObjectCreated(hoJson))) Begin
Send CreateComObject of hoJson
End
Set ComEmitCompact Of hoJson To False
// Assume the file contains the data as shown above..
Get ComLoadFile Of hoJson "qa_data/json/pathSample.json" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoJson To sTemp1
Showln sTemp1
Procedure_Return
End
// First, let's get the value of "cc1"
// The path to this value is: nestedObject.aaa.bb1.cc1
Get ComStringOf Of hoJson "nestedObject.aaa.bb1.cc1" To sTemp1
Showln sTemp1
// Now let's get number 18 from the nestedArray.
// It is located at nestedArray[1][2][1]
// (remember: Indexing is 0-based)
Get ComIntOf Of hoJson "nestedArray[1][2][1]" To iTemp1
Showln "This should be 18: " iTemp1
// We can do the same thing in a more roundabout way using the
// I, J, and K properties. (The I,J,K properties will be convenient
// for iterating over arrays, as we'll see later.)
Set ComI Of hoJson To 1
Set ComJ Of hoJson To 2
Set ComK Of hoJson To 1
Get ComIntOf Of hoJson "nestedArray[i][j][k]" To iTemp1
Showln "This should be 18: " iTemp1
// Let's iterate over the array containing the numbers 17, 18, 19, 20.
// First, use the SizeOfArray method to get the array size:
Get ComSizeOfArray Of hoJson "nestedArray[1][2]" To iSz
// The size should be 4.
Showln "size of array = " iSz " (should equal 4)"
// Now iterate...
For i From 0 To (iSz - 1)
Set ComI Of hoJson To i
Get ComIntOf Of hoJson "nestedArray[1][2][i]" To iTemp1
Showln iTemp1
Loop
// Let's use a triple-nested loop to iterate over the nestedArray:
// szI should equal 1.
Get ComSizeOfArray Of hoJson "nestedArray" To iSzI
For i From 0 To (iSzI - 1)
Set ComI Of hoJson To i
Get ComSizeOfArray Of hoJson "nestedArray[i]" To iSzJ
For j From 0 To (iSzJ - 1)
Set ComJ Of hoJson To j
Get ComSizeOfArray Of hoJson "nestedArray[i][j]" To iSzK
For k From 0 To (iSzK - 1)
Set ComK Of hoJson To k
Get ComIntOf Of hoJson "nestedArray[i][j][k]" To iTemp1
Showln iTemp1
Loop
Loop
Loop
// Now let's examine how to navigate to JSON objects contained within JSON arrays.
// This line of code gets the value "kiwi" contained within "mixture"
Get ComStringOf Of hoJson "mixture.arrayA[2].fruit" To sTemp1
Showln sTemp1
// This line of code gets the color "yellow"
Get ComStringOf Of hoJson "mixture.arrayA[1].colors[0]" To sTemp1
Showln sTemp1
// Getting an object at a path:
// This gets the 2nd object in "arrayA"
Get Create (RefClass(cComChilkatJsonObject)) To hoObj2
If (Not(IsComObjectCreated(hoObj2))) Begin
Send CreateComObject of hoObj2
End
Get pvComObject of hoObj2 to vObj2
Get ComObjectOf2 Of hoJson "mixture.arrayA[1]" vObj2 To iSuccess
// This object's "animal" should be "plankton"
Get ComStringOf Of hoObj2 "animal" To sTemp1
Showln sTemp1
// Note that paths are relative to the object, not the absolute root of the JSON document.
// Starting from obj2, "purple" is at "colors[2]"
Get ComStringOf Of hoObj2 "colors[2]" To sTemp1
Showln sTemp1
// Getting an array at a path:
// This gets the array containing the colors red, green, blue:
Get Create (RefClass(cComChilkatJsonArray)) To hoArr1
If (Not(IsComObjectCreated(hoArr1))) Begin
Send CreateComObject of hoArr1
End
Get pvComObject of hoArr1 to vArr1
Get ComArrayOf2 Of hoJson "mixture.arrayA[0].colors" vArr1 To iSuccess
Get ComSize Of hoArr1 To iSzArr1
For i From 0 To (iSzArr1 - 1)
Get ComStringAt Of hoArr1 i To sTemp1
Showln i ": " sTemp1
Loop
// The Chilkat JSON path uses ".", "[", and "]" chars for separators. When a name
// contains one of these chars, use double-quotes in the path:
Get ComStringOf Of hoJson '"name.with.dots".grain' To sTemp1
Showln sTemp1
End_Procedure