0

I am getting some api response , where I have to change all key value is camelcase ..

like below I am getting response . i have to convert all key is small . like CBSServiceResponseDtls = cBSServiceResponseDtls same for all keys . Dont want to change any of value And few of keys has _ . Like "API_OUTPUT" I have to change in apiOutput. Please help. Thanks

{
   "CBSServiceResponseDtls":{
      "Response":{
         "ResultStatus":{
            "ResultCode":0,
            "ResultMessage":"SUCCESS"
         },
         "Data":{
            "EVENT":{
               "API_OUTPUT":{
                  "SUCCESS_FLAG":0,
                  "REQUEST_STATUS":0,
                  "ABILLITY_REF_NUM":32038,
                  "RESPONSE_ERROR_CODE":"",
                  "SUCCESS_MESG_LANG_1":"Request has been Processed Successfully",
                  "SUCCESS_MESG_LANG_2":"Request has been Processed Successfully",
                  "TRANSACTION_LOG_REFERNCE":2.0200507064507202e+27
               },
               "LOGIN_DETAILS":{
                  "LOGIN_DTLS":[
                     {
                        "LOGIN_NAME":"soban",
                        "LOCATION_CODE":"WAREHOUSE",
                        "LOCATION_CODE_NO":1,
                        "LOCATION_DESC":"WAREHOUSE",
                        "DEFAULT_FLAG":"Y"
                     },
                     {
                        "LOGIN_NAME":"soban",
                        "LOCATION_CODE":"BTP",
                        "LOCATION_CODE_NO":70,
                        "LOCATION_DESC":"BTP",
                        "DEFAULT_FLAG":"N"
                     }
                  ]
               }
            }
         }
      }
   }
}
Abhigyan Gaurav
  • 1,854
  • 6
  • 28
  • 58

2 Answers2

0

Simple solution, You can use regex replace/transform function to change all keys.

More: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

CamelCase Sample:

const toCamelCase = (str = "") => {
  const [first, ...rest] = str.split("_");
  return (
    first.toLowerCase() +
    rest
      .map((word) => {
        word = word.toLowerCase();
        return word.slice(0, 1).toUpperCase() + word.slice(1);
      })
      .join("")
  );
};
const tranform = (m) =>
  m.indexOf("_") === -1
    ? m.slice(0, 1).toLowerCase() + m.slice(1)
    : toCamelCase(m);
const formatJson = (obj) => {
  const jsonString = JSON.stringify(obj).replace(
    /\"(\w+)\":/g,
    (_, m) => `"${tranform(m)}":`
  );
  return JSON.parse(jsonString);
};
const data = {"CBSServiceResponseDtls":{"Response":{"ResultStatus":{"ResultCode":0,"ResultMessage":"SUCCESS"},"Data":{"EVENT":{"API_OUTPUT":{"SUCCESS_FLAG":0,"REQUEST_STATUS":0,"ABILLITY_REF_NUM":32038,"RESPONSE_ERROR_CODE":"","SUCCESS_MESG_LANG_1":"Request has been Processed Successfully","SUCCESS_MESG_LANG_2":"Request has been Processed Successfully","TRANSACTION_LOG_REFERNCE":2.0200507064507202e+27},"LOGIN_DETAILS":{"LOGIN_DTLS":[{"LOGIN_NAME":"soban","LOCATION_CODE":"WAREHOUSE","LOCATION_CODE_NO":1,"LOCATION_DESC":"WAREHOUSE","DEFAULT_FLAG":"Y"},{"LOGIN_NAME":"soban","LOCATION_CODE":"BTP","LOCATION_CODE_NO":70,"LOCATION_DESC":"BTP","DEFAULT_FLAG":"N"}]}}}}}}
const json = formatJson(data);
console.log("%j", json);
xdeepakv
  • 7,835
  • 2
  • 22
  • 32
0

You can use this helper function to do it recursively:

function objToLowerCase(obj) {
     if (Array.isArray(obj)) {
        return obj.map((entry) => typeof entry !== "object" ? entry : objToLowerCase(entry));
     }
     const newObj = Object.entries(obj).reduce((obj, [key, value]) => {
    const newKey = key.toLowerCase().split("_").join("");
    const newValue = typeof value !== "object" ? value : objToLowerCase(value);
    obj[newKey] = newValue;
    return obj;
  }, {});
  return newObj;
}

Here is a sandbox.

To make it camelCase, you could use this function:

function toCamelCase(str) {
  if (str === str.toUpperCase()) {
    return str
      .toLowerCase()
      .split("_")
      .map((s, i) =>
        i === 0 ? s : s.slice(0, 1).toUpperCase() + s.slice(1, s.length)
      )
      .join("");
  } else {
    return str.slice(0, 1).toLowerCase() + str.slice(1);
  }
}

and call it like this:

function objToLowerCase(obj) {
     if (Array.isArray(obj)) {
        return obj.map((entry) => typeof entry !== "object" ? entry : objToLowerCase(entry));
     }
     const newObj = Object.entries(obj).reduce((obj, [key, value]) => {
    const newKey = toCamelCase(key)
    const newValue = typeof value !== "object" ? value : objToLowerCase(value);
    obj[newKey] = newValue;
    return obj;
  }, {});
  return newObj;
}
Domino987
  • 8,475
  • 2
  • 15
  • 38