Sample code for 30+ languages & platforms
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

PureBasic
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