Sean Bailey
Sean Bailey

Reputation: 375

Regex Remove Spaces in JSON String

I have a wider automation which populates a lookup table and then serializes the data into a JSON file as this is my desired output.

I am required to remove the spaces once in the JSON format of the lookup column headers.

I am looking to see if it is possible to have a regex which will identify the headers and be able to remove the spaces.

JSON String below:

     [
  {
"INVOLVED PARTY ID":" 9445999606",
"CUSTOMER NUMBER":" 9445999606",
"PRODUCT":"Current Account",
"LAST UPDATED":"20/02/2020 10:33:00",
"APPLICATION STATUS":"Clearing Handbrake",
"PROGRESS":"Progress",
"APPLICANT":" ACCEPT FLEX INDICATOR Y",
"QUESTION 3 - HEART/CANCER CONDITIONS":null,
  }
    ]

Desired output after regex manipulation

     [
  {
"INVOLVEDPARTYID":" 9445999606",
"CUSTOMERNUMBER":" 9445999606",
"PRODUCT":"Current Account",
"LASTUPDATED":"20/02/2020 10:33:00",
"APPLICATIONSTATUS":"Clearing Handbrake",
"PROGRESS":"Progress",
"APPLICANT":" ACCEPT FLEX INDICATOR Y",
"QUESTION3-HEART/CANCERCONDITIONS":null,
 }
   ]

Notice only the spaces within the headers have been removed.

Any help on the regex string would be much appreciated or point me in the right direction.

Upvotes: 2

Views: 2149

Answers (2)

Mechanic
Mechanic

Reputation: 5380

The logic here is to first creating a new empty result object, iterate over prev object keys, remove the whitespace from it, then assign it to result object as key and put the prev value (intact) as the this(filtered key)'s value;

const yourData =[
  {
"INVOLVED PARTY ID":" 9445999606",
"CUSTOMER NUMBER":" 9445999606",
"PRODUCT":"Current Account",
"LAST UPDATED":"20/02/2020 10:33:00",
"APPLICATION STATUS":"Clearing Handbrake",
"PROGRESS":"Progress",
"APPLICANT":" ACCEPT FLEX INDICATOR Y",
"QUESTION 3 - HEART/CANCER CONDITIONS":null,
  }
];

let newData = yourData.map(obj=>{
  let regexedObj = {};
  Object.keys(obj).forEach( prevKey => {
    //pattern can be /\s/ too, depends on use-case
    const regexedKey = prevKey.replace(/ /g,'')
    regexedObj[regexedKey] = obj[prevKey]
  })
  return regexedObj
})

console.log(newData)

Upvotes: 1

PranshuKhandal
PranshuKhandal

Reputation: 869

Well, this one works fine:

(?<=\"[A-Z0-9 /-]*) (?=[A-Z0-9 /-]*\":)

It has two non-capturing groups:

  1. Catches alphabets (capital), digits, space, hyphen and slash followed by a double quotation mark.
  2. Catches all the same char set before double quotation mark and a colon.

In between there is the space which gets captured.

Check this out https://regexr.com/4vogd

Upvotes: 1

Related Questions