PureBasic
PureBasic
Get the Root of a JSON Document
See more JSON Examples
Demonstrates how to get back to the JSON root object from anywhere in the JSON document. This example uses the following JSON document:
{
"flower": "tulip",
"abc":
{
"x": [
{ "a" : 1 },
{ "b1" : 100, "b2" : 200 },
{ "c" : 3 }
],
"y": 200,
"z": 200
}
}
Chilkat PureBasic Downloads
IncludeFile "CkJsonArray.pb"
IncludeFile "CkJsonObject.pb"
Procedure ChilkatExample()
success.i = 0
json.i = CkJsonObject::ckCreate()
If json.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
jsonStr.s = "{" + Chr(34) + "flower" + Chr(34) + ": " + Chr(34) + "tulip" + Chr(34) + "," + Chr(34) + "abc" + Chr(34) + ":{" + Chr(34) + "x" + Chr(34) + ": [{ " + Chr(34) + "a" + Chr(34) + " : 1 },{ " + Chr(34) + "b1" + Chr(34) + " : 100, " + Chr(34) + "b2" + Chr(34) + " : 200 },{ " + Chr(34) + "c" + Chr(34) + " : 3 }]," + Chr(34) + "y" + Chr(34) + ": 200," + Chr(34) + "z" + Chr(34) + ": 200}}"
success = CkJsonObject::ckLoad(json,jsonStr)
If success = 0
Debug CkJsonObject::ckLastErrorText(json)
CkJsonObject::ckDispose(json)
ProcedureReturn
EndIf
; Get the "abc" object.
abcObj.i = CkJsonObject::ckCreate()
If abcObj.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkJsonObject::ckObjectOf2(json,"abc",abcObj)
If success = 0
Debug CkJsonObject::ckLastErrorText(json)
CkJsonObject::ckDispose(json)
CkJsonObject::ckDispose(abcObj)
ProcedureReturn
EndIf
; Side note: The JSON of a sub-part of the document can be emitted from any JSON object:
CkJsonObject::setCkEmitCompact(abcObj, 0)
Debug CkJsonObject::ckEmit(abcObj)
; Navigate to the "x" array
xArray.i = CkJsonArray::ckCreate()
If xArray.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkJsonObject::ckArrayOf2(abcObj,"x",xArray)
; Navigate to the 2nd object contained within the array. This contains members b1 and b2
bObj.i = CkJsonObject::ckCreate()
If bObj.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkJsonArray::ckObjectAt2(xArray,1,bObj)
; Show that we're at "b1/b2".
; The value of "b1" should be "200"
Debug "b2 = " + Str(CkJsonObject::ckIntOf(bObj,"b2"))
; Now go back to the JSON doc root:
docRoot.i = CkJsonObject::ckCreate()
If docRoot.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkJsonObject::ckGetDocRoot2(bObj,docRoot)
; We'll skip the null check and assume it's non-null...
; Pretty-print the JSON doc from the root to show that this is indeed the root.
CkJsonObject::setCkEmitCompact(docRoot, 0)
Debug CkJsonObject::ckEmit(docRoot)
CkJsonObject::ckDispose(json)
CkJsonObject::ckDispose(abcObj)
CkJsonArray::ckDispose(xArray)
CkJsonObject::ckDispose(bObj)
CkJsonObject::ckDispose(docRoot)
ProcedureReturn
EndProcedure