Question
· May 28

JSON - Field extraction using Object Script

I am struggling on how to pull out individual fields from a JSON. In a previous post someone had mentioned that I could...

  If ((tHttpResponseIsObject) && ($ZCONVERT(tHttpResponseContentType,"L") [ "application/json"))
  {
    set responseData = {}.%FromJSON(tHTTPResponse.Data)
    set pResponse = ##class(osuwmc.COM.Response.StringResponse).%New()
    if responseData.count =1{
      set pResponse.COMPortalURL = responseData.items.%Get(0).portalUrl
      set pResponse.COMPureID = responseData.items.%Get(0).pureId
      set pResponse.COMTitle = responseData.items.%Get(0).titles.%Get(0).value
    }
  }

for the following JSON response...

 
JSON

Where I would like to pull value.en_US value, "Professor". 

'When I tried set pResponse.COMTitle = responseData.items.%Get(0).titles.%Get(0).value.%Get(0).en_US, I am not getting any data back.

When set pResponse.COMTitle = responseData.items.%Get(0).titles.%Get(0).value I get back 95@%Library.DynamicObject.

What is the correct syntax?

Product version: IRIS 2024.1
$ZV: IRIS for UNIX (Red Hat Enterprise Linux 8 for x86-64) 2024.1 (Build 267_2U) Tue Apr 30 2024 16:06:39 EDT [HealthConnect:3.5.0-1.m1]
Discussion (6)2
Log in or sign up to continue

As always there is a possibility to get <INVALID OREF> while direct access of objects. So, we can use responseData.items.%Get(0).titles.%Get(0).value.%Get("en_US") with some additional checks like below.

If $IsObject(responseData.items) && (responseData.items.%Size()) {
    dao1 =responseData.items.%Get(0) 
    If $IsObject(dao1.titles) {
        dao1.titles.%Get(0).value.%Get("en_US")
    }
}