【问题标题】:how to convert api respons ekey value in camelcase如何在camelcase中转换api响应ekey值
【发布时间】:2020-05-07 11:34:22
【问题描述】:

我得到一些 api 响应,我必须更改所有键值是驼峰式 ..

如下所示,我得到了回应。我必须转换所有密钥都很小。 就像 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


    【解决方案1】:

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

    【讨论】:

    • 如果我必须改变这个,我骆驼呢? toCamelCase 但它不起作用
    • toCamelCase 不是函数:-D
    • 为什么要驼色箱??如果你需要小写??
    • 已更新,您只需将第一个字符转换为情人大小写即可。
    • 感谢您的解决方案,但我能够做到这一点,但在这种情况下,如果所有字母都大写,那么它会使第一个字母变小,所有字母都用大写..它不会删除_
    【解决方案2】:

    您可以使用此辅助函数递归地执行此操作:

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

    【讨论】:

    • 如果我必须用骆驼皮做呢?
    • 你必须使用这里提到的一种方法,而不是小写的stackoverflow.com/questions/2970525/…
    • 如果我必须改变这个我骆驼呢? toCamelCase 但它不起作用
    • @AbhigyanGaurav toCamelCase 不是函数。我更新了我的答案。
    • 非常感谢您的解决方案,但我能够做到这一点,但在这种情况下,如果所有字母都大写,那么它会使第一个字母变小,所有字母都用大写..而不是删除 _ 。就像我的问题一样,在此之后有一个事件,它即将到来的事件相同的 LOGIN_NAME 没有转换
    猜你喜欢
    • 2019-11-20
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多