【问题标题】:Split and Join with Variable in Javascript在 Javascript 中使用变量拆分和连接
【发布时间】:2021-10-09 16:43:08
【问题描述】:

我有 ff。数组的 JSON 负载

  {
    "Meta": {
        "LastAvailableDateTime": "",
        "FirstAvailableDateTime": "",
        "TotalPages": 1,
        "Count": 2
    },
    "Links": {
        "Next": null,
        "Previous": null,
        "Self": ""
    },
    "Data": {
        "Transactions": [
            {
                "AuthCode": "175601",
                "CardId": "************8104"
            },
            {
                "AuthCode": "783453",
                "CardId": "************8104"
            },
           {

                "AuthCode": "12132",
                "CardId": "************8104"
            }
        ]
    }
}

我想通过将 CardId 重命名为 MaskedCardId 并添加一个名为 CardId 的新参数和一个实际的 Card id 来覆盖此有效负载。

我的代码是 ff。下面

var json = //The Parsed JSON Payload;
var CardId = "123458104"

json = JSON.parse(
       JSON.stringify(json).split('"CardId":')
           .join('"CardId":CardId,"MaskedCardId":')
);

我已经可以用名为 MaskedCardId 的重命名参数替换 CardId。与 ff。代码

 json = JSON.parse(JSON.stringify(json).split('"CardId":').join('"MaskedCardId":'));

但是每当我尝试使用变量值添加一个名为 CardId 的新参数时,它都会出错。

失败并出现错误:Javascript 运行时错误:“SyntaxError: Unexpected 令牌:C

如何使这行代码符合我的预期目的? TIA

【问题讨论】:

  • 为什么不json.MaskedCardId = json.CardIdjson.CardId = CardId
  • 因为我正在处理 JSON 数组。我已经更新了示例有效负载,因为它似乎类似于我正在处理的最接近的有效负载。

标签: javascript apigee


【解决方案1】:

记住旧值

const data = {
  "AuthCode": "1",
  "PostingDate": "2021-05-06",
  "Amount": "6000.28",
  "CardId": "************8104",
};

const CardIdNew = "123458104";
const CardIdOld = data.CardId;

data.CardId       = CardIdNew;
data.MaskedCardId = CardIdOld;

console.log(data);

或者说得更简单:

const data = {
  "AuthCode": "1",
  "PostingDate": "2021-05-06",
  "Amount": "6000.28",
  "CardId": "************8104",
};

data.MaskedCardId = data.CardId;   // Add 
data.CardId       = "123458104";   // Override 

console.log(data);

问题编辑后的附录

循环包含交易的数组:

const json = {"Meta":{"LastAvailableDateTime":"","FirstAvailableDateTime":"","TotalPages":1,"Count":2},"Links":{"Next":null,"Previous":null,"Self":""},"Data":{"Transactions":[{"AuthCode":"175601","CardId":"************8104"},{"AuthCode":"783453","CardId":"************8104"},{"AuthCode":"12132","CardId":"************8104"}]}};

const CardId = "123458104"

json.Data.Transactions.forEach(ob => {
  ob.MaskedCardId = ob.CardId;
  ob.CardId = CardId;
});

console.log(json);

【讨论】:

  • 嗨,我在问题中更新了我的 JSON 有效负载,以类似于我真正正在处理的内容,我试图修改 JSON 数组中的参数和值,你能检查一下吗? TIA
  • 注明,谢谢。对不起。不得不修改它,因为原始有效载荷很长,而且我似乎对示例有效载荷进行了过度编辑。
  • @iamjoshua 用另一个例子扩展了我的答案。
【解决方案2】:

我想这应该可行。连接必须是这样的.join('"CardId":"' + CardId + '", "MaskedCardId":'),因为您正在将字符串变量添加到对象中,不要忘记将"' + CardId + '"

var json = //The Parsed JSON Payload;
var CardId = "123458104"

json = JSON.parse(
       JSON.stringify(json).split('"CardId":')
           .join('"CardId":"' + CardId + '", "MaskedCardId":')
);

在这里试试

var json = {
  someId: 10,
  somekey: "somevalue",
  cards: [
     {
      CardId: "*********67",
      otherkey: "othervalue"
     },
     {
      CardId: "*********67",
      otherkey: "othervalue"
     }
  ]
}
var CardId = "123458104"

json = JSON.parse(
       JSON.stringify(json).split('"CardId":')
           .join('"CardId":"' + CardId + '", "MaskedCardId":')
);

console.log(json);

【讨论】:

  • 这对我有用,尽管在 atm 获得最多票的另一个答案似乎能够完成这项工作,但我将这个答案标记为答案,因为 Apigee 不支持该答案的 forEach。
【解决方案3】:

拆分和连接用于字符串;而是将 JSON 作为对象进行操作。

json.MaskedCardId = json.CardId;
json.CardId = CardId;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 2017-09-19
    相关资源
    最近更新 更多