cancel
Showing results for 
Search instead for 
Did you mean: 

Handling Multiple 'null values

aditya_gupta41
Contributor

I am currently having this requirement where i need to handle all the null values coming in input. The common thing i noticed that all these values end with ‘_DATE’ but this is coming in an object. for all the null values, i need to pass value ‘0000-00-00’. The challenge which i am facing is this is dynamic. sometimes there are overall 28 fields ending with ‘_DATE’ and sometimes its more than 100.

[
  {
  "DEPRECIATIONAREAS": [
      {
        "ASSET": "00005000xxxx",
        "DEP_UNITS": 0,
        "O_START_DATE": "2006-09-01",
        "S_START_DATE": null,
        "INTEREST_START_DATE": null,
        "READINESS": "2006-08-31",
        "INDEX": "",
        "AGE_INDEX": "",
        "VAR_DEP_PORTION": 0.0000,
        "SCRAPVALUE": 0.0000,
		}
		]
	"POSTINGINFORMATION": [
      {
        "ASSET": "000050009142",
        "SUBNUMBER": "0000",
        "CAP_DATE": "2006-08-31",
        "DEACT_DATE": null,
        "INITIAL_ACQ": "2006-08-31",
        "INITIAL_ACQ_YR": 2006,
        "INITIAL_ACQ_PRD": 11,
        "PLRET_DATE": null,
        "PO_DATE": null,
        "CAP_KEY": ""
		}
		]
		}
		]

Can someone provide me a solution for this?

Thanks in Advance

1 ACCEPTED SOLUTION

This works. Thanks for your help @j.angelevski

View solution in original post

14 REPLIES 14

bojanvelevski
Valued Contributor

Hey @aditya.gupta41 ,

The JSON you provided is not valid. Are these two separate samples just posted as one? (DEPRECIATIONAREAS,POSTINGINFORMATION)

These are arrays coming inside the data. I cannot post the actual output, but here is another example:

[
  {
    "data": {
      "TIMEDEPENDENTDATA": [
        {
          "ASSET": "000050",
          "SUBNUMBER": "0000",
          "FROM_DATE": "1900-01-01",
          "TO_DATE": "9999-12-31",
          "W_DATE": null,
          "X_DATE": null
        }
      ],
      "SELECTIONCRITERIA": [
        {
          "PARAMETER": "GENERALDATA",
          "FIELD": "ASSET",
          "SIGN": "I",
          "OPTION": "E",
          "LOW": "00005000",
          "HIGH": ""
        }
      ],
      "REALESTATE": [

      ],
      "POSTINGINFORMATION": [
        {
          "ASSET": "0000502",
          "SUBNUMBER": "0000",
          "C_DATE": "2006-08-31",
          "DEACT_DATE": null,
          "PLRET_DATE": null,
          "PO_DATE": null,
          "CAP_KEY": ""
        }
      ],
        }
      ],
      "NETWORTHVAL": [

      ],
      "INVENTORY": [
        {
          "ASSET": "000050",
          "SUBNUMBER": "0000",
          "V_DATE": null,
          "W_DATE": null
        }
      ],
      "INSURANCE": [

      ]
}
]

j_angelevski
Contributor III

Hi @aditya.gupta41,

Try with the following expression:

{}.extend(...$.entries().map(val => {[val[0]]: val[1].map(v => {}.extend(...v.entries().map(date => date[0].contains("_DATE") && date[1] == null ? {[date[0]]: "0000-00-00"} : {[date[0]]: date[1]} )))}))

This is assuming you have one or multiple arrays in the root object, assuming the arrays have one or multiple objects. This will iterate over each array find the “_DATE” key/value pair, and if a “_DATE” happens to be null, it will change the original value with the “0000-00-00”, and put back everything into the original format.

image

This didn’t worked for me

Failure: Map type does not have a method named: map, found in: …]: date[1]} ))). Perhaps you meant: mapKeys, mapValues, Resolution: Please check expression syntax and data types.