如何转换api在驼峰中响应ekey值

问题描述 投票:0回答:2

我得到一些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"
                     }
                  ]
               }
            }
         }
      }
   }
}
javascript json reactjs react-native camelcasing
2个回答
0
投票

简单的解决方案,您可以使用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);

0
投票

您可以使用此帮助程序功能来递归执行:

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

这里是sandbox

要使其成为驼峰式案例,您可以使用此功能:

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.