как преобразовать значение api response ekey в camelcase - PullRequest
0 голосов
/ 07 мая 2020

Я получаю ответ api, в котором мне нужно изменить все ключевые значения на camelcase ..

как показано ниже, я получаю ответ. я должен преобразовать все ключи малы. как CBSServiceResponseDtls = cBSServiceResponseDtls одинаково для всех ключей. Не хочу менять какое-либо значение И некоторые ключи имеют _. Как и «API_OUTPUT», мне нужно изменить apiOutput. Пожалуйста помоги. Спасибо

{
   "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"
                     }
                  ]
               }
            }
         }
      }
   }
}

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Вы можете использовать эту вспомогательную функцию, чтобы сделать это рекурсивно:

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;
}

Вот песочница .

Чтобы сделать это camelCase, вы можете использовать эту функцию :

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);
  }
}

и назовите его так:

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;
}
0 голосов
/ 07 мая 2020

Простое решение, вы можете использовать regex функцию замены / преобразования для изменения всех ключей.

Подробнее: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

Пример CamelCase:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...