【问题标题】:Updating JSON array specific string更新 JSON 数组特定字符串
【发布时间】:2020-01-23 13:35:39
【问题描述】:

我遇到的问题是我从条纹返回一组用户信用卡。因为 Stripe 将默认卡片或“来源”与卡片对象分开,所以我需要将响应附加回我的应用程序。我的应用程序有一个带有 isDefault BOOL 变量的结构。应用部分无法真正更改。

在我在下面发布的 JSON 代码中,我用 aarows 制作了一些关于我想要新键:值去哪里的 cmets。简而言之,如果他们自己的 {} 中的任何卡与用户拥有的默认卡匹配,那么我只想将键值:“isDefault”:true 插入与默认卡匹配的 {}。

我玩这个已经有一段时间了,我被卡住了。我使用 for 循环在数组中搜索匹配的卡片 ID,但不知道如何附加到卡片的特定 {} 中,它只是进入整个数组。

使用 cmets 的 JSON 响应:

{
    "cardsData": [
        {
            "id": "card_328746328746",  
            "object": "card",
            "address_city": null,
            "address_country": null,
            "address_line1": null,
            "address_line1_check": null,
            "address_line2": null,
            "address_state": null,
            "address_zip": null,
            "address_zip_check": null,
            "brand": "Discover",
            "country": "US",
            "customer": "cus_djklfhdskljfhs",
            "cvc_check": "pass",
            "dynamic_last4": null,
            "exp_month": 9,
            "exp_year": 2023,
            "fingerprint": "dfhsdkljfsdlkf",
            "funding": "credit",
            "last4": "1117",
            "metadata": {},
            "name": null,
            "tokenization_method": null
        },
        {
            "id": "card_kjdslhfjdhf",  <-- HAPPENS TO BE DEFAULT CARD, NEED TO INSERT HERE
            "object": "card",
            "address_city": null,
            "address_country": null,
            "address_line1": null,
            "address_line1_check": null,
            "address_line2": null,
            "address_state": null,
            "address_zip": null,
            "address_zip_check": null,
            "brand": "Visa",
            "country": "US",
            "customer": "cus_dkljfhdkjfhd",
            "cvc_check": "pass",
            "dynamic_last4": null,
            "exp_month": 4,
            "exp_year": 2054,
            "fingerprint": "dfjsklkjfhsd",
            "funding": "credit",
            "last4": "4242",
            "metadata": {},
            "name": null,
            "tokenization_method": null
            "isDefault": true  <-- THIS CURRENTLY DOES NOT EXIST, THIS IS WHERE I NEED HELP TO GET THIS INSERTED
        }
    ]
}

Node JS/Cloud 功能代码:

exports.getCardsTest = functions.https.onRequest((req, res) => {
    if (req.method !== 'POST') {
        return;
    }
    const customerId = req.body.stripeId;
    stripe.customers.retrieve(
        customerId,
        {

        },
        function (err, customer) {
            const cardsData = customer.sources.data;
            const defaultCard = customer.default_source;

            var isDefault = false;  //check of vairable value
            console.log('isDefault before:', isDefault);

            for (var i = 0; i < cardsData.lenth; i++); {
                if (cardsData[i].id == defaultCard);
                isDefault = true;
                cardsData.push({ isDefault });   <--THIS IS WHERE I NEED HELP, I NEED isDefault: true APPENDED TO THE ARRAY STRING {} MATCHING THE KEY VALUE OF THE DEFAULT CARD
            };

            console.log('isDefaultAfter:', isDefault);  // check to make sure IF statement is working

            return res.status(200).send({ cardsData });
        }
    );

});

【问题讨论】:

    标签: node.js google-cloud-functions stripe-payments


    【解决方案1】:

    你可以像这样更新数组中的值

    for (var i = 0; i < cardsData.length; i++); {
      if (cardsData[i].id === defaultCard) {
        cardsData[i].isDefault = true
      }
    }
    

    你的if 没用,因为缺少一部分,而且你在卡片阵列内推,我认为

    【讨论】:

    • 成功了!我不敢相信我的语法错误,谢谢你的帮助!
    • 如果正确,请将此答案标记为正确,谢谢!
    猜你喜欢
    • 2022-09-29
    • 1970-01-01
    • 2016-10-07
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    相关资源
    最近更新 更多