解析 JSON 响应并查找特定变量

Parsing JSON responses and looking for specific variables

我需要解析并查找特定的 ID。在下面的代码中,我需要能够提取 ID 号。看起来像这样 "itemIds":["918e337d-82ae-4e91-bdc3-16ad06572e21"。我需要能够提取号码“918e337d-82ae-4e91-bdc3-16ad06572e21”。我一直无法理解这个概念。如果您可以发送操作方法或实际代码。将不胜感激。

{"dbSessionTokenMap":{"CXO_PC_ST":"e5b96399-fefc-4d9d-93ba-2aa1059008ce|{\"mtoken\":\"301:12#90271897#2=60818072#7=100439087\"}"},"id":"e5b96399-fefc-4d9d-93ba-2aa1059008ce","checkoutFlowType":"Guest","cartId":"ffd6cb2f-efc2-47b2-96d9-52d2cfb3d69b","items":[{"id":"918e337d-82ae-4e91-bdc3-16ad06572e21","offerId":"864A02B3BF7442A4802E6DF7BA2EDA28","productId":"1ZPTYHZN85S6","productName":"Pokemon Assorted Lot of 50 Single Cards [Any Series]","itemId":127446742,"sellerId":"A577588AB81D43AE9E7F468183B3568A","thumbnailUrl":"https://i5.walmartimages.com/asr/aa6ed747-9cd0-44dc-b927-44bc2b7e1ca7_1.62c435484d4015af1c325e9cdeeb3662.jpeg?odnHeight=100&odnWidth=100&odnBg=FFFFFF","legacySellerId":3340,"productClassType":"REGULAR","quantity":1,"unitPrice":8.61,"type":"REGULAR","price":8.61,"unitOfMeasure":"EA","hasCarePlan":false,"brand":"Pok?mon","discount":{},"rhPath":"20000:25000:25003:25114:25333","isWarrantyEligible":false,"category":"0:4171:3318550:617941:8920388","primaryCategory":"Home Page/Toys/Shop Toys by Age/Toys for Kids 5 to 7 Years/Toys for Kids 5 to 7 Years","isCarePlan":false,"isEgiftCard":false,"isAssociateDiscountEligible":false,"isShippingPassEligible":false,"isTwoDayShippingEligible":false,"classId":"5","maxQuantityPerOrder":100,"isSubstitutable":false,"isInstaWatch":false,"isAlcoholic":false,"isSnapEligible":false,"isAgeRestricted":false,"isSubstitutionsAllowed":false,"fulfillmentSelection":{"fulfillmentOption":"S2H","shipMethod":"STANDARD","availableQuantity":172},"servicePlanType":"NONE","errors":[],"wfsEnabled":false,"isAlcohol":false}],"shipping":{"postalCode":"82001","city":"CHEYENNE","state":"WY"},"promotions":[{"promotionId":"1c2cbad1-205e-425f-9297-8629d68e97f6","okToPayAwards":[{"applyTo":"CART_FULFILLMENT_PRICE","actionType":"AWARD","name":"DS_Donors_Choose_Teachers_Card","awardType":"OK_TO_PAY","description":"DonorsChoose Card","applicableTo":{"ITEM_TAX":true,"SHIP_PRICE":true,"SHIP_TAX":true,"FEE":true,"ITEM_PRICE":true},"asset":{"image":"https://i5.walmartimages.com/dfw/63fd9f59-e0cf/455269aa-c4e8-46a5-8d76-5d4b458e1269/v1/Select_gift_card.png","imageAlt":""},"awardEligibleItemIds":[],"awardEligibleTotalsByItemId":{}}],"dsEligibleItemIds":[],"dsEligibleTotals":{}}],"summary":{"subTotal":8.61,"shippingIsEstimate":false,"taxIsEstimate":true,"grandTotal":8.61,"quantityTotal":1,"amountOwed":8.61,"merchandisingFeesTotal":0,"shippingCosts":[{"label":"Top Cut Central shipping","type":"marketplace_shipping","cost":0.0}],"shippingTotal":0.0,"hasSurcharge":false,"preTaxTotal":8.61,"addOnServicesTotal":0,"itemsSubTotal":8.61},"pickupPeople":[],"email":"","buyer":{"customerAccountId":"9afb345e-74b8-4afb-93d0-4bf52697e18f","isGuestSignupRequired":false,"isGuest":true,"isAssociate":false,"applyAssociateDiscount":false},"allowedPaymentTypes":[{"type":"CREDITCARD","cvvRequired":true},{"type":"PAYPAL","cvvRequired":false},{"type":"GIFTCARD","cvvRequired":false},{"type":"VISA_CHECKOUT","cvvRequired":false},{"type":"MASTERPASS","cvvRequired":false},{"type":"CHASEPAY","cvvRequired":false},{"type":"AMEX_CHECKOUT","cvvRequired":false}],"registries":[],"payments":[],"cardsToDisable":[],"allowedPaymentPreferences":[],"isRCFEligible":false,"isMarketPlaceItemsExist":true,"version":"v3","shippingCategory":{"shippingGroups":[{"itemIds":["918e337d-82ae-4e91-bdc3-16ad06572e21"],"seller":"Top Cut Central","defaultSelection":true,"fulfillmentOption":"S2H","shippingGroupOptions":[{"method":"EXPEDITED","methodDisplay":"Expedited","selected":false,"charge":8.99,"deliveryDate":1606766400000,"availableDate":1606766400000,"fulfillmentOption":"S2H","onlineStoreId":0,"isThresholdShipMethod":false},{"method":"STANDARD","methodDisplay":"Standard","selected":true,"charge":0.0,"deliveryDate":1606939200000,"availableDate":1606939200000,"fulfillmentOption":"S2H","onlineStoreId":0,"isThresholdShipMethod":false}],"isEdelivery":false,"hasWFSItem":false,"itemSellerGroups":[]}]},"entityErrors":[],"oneDaySelected":false,"paymentWithBagFee":false,"giftDetails":{"giftOrder":false,"hasGiftEligibleItem":false,"xoGiftingOptIn":false},"canApplyDetails":[],"dbName":"e5b96399-fefc-4d9d-93ba-2aa1059008ce|C","jwt":"eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI1MjdmZTRjYi0wZjI5LTRjZWYtOWRiOS00Yzc1YWQ5MTMwNTQiLCJpYXQiOjE2MDYwOTY0NjMsImlzcyI6IjU3YjM0ZTNhZGE1MjkzMGEwYzBjYTFjOSIsIk9yZ1VuaXRJZCI6IjU2ZWJiMTJkZGE1MjkzMWRhOGZlMDc5YSIsIlJlZmVyZW5jZUlkIjoiZTViOTYzOTktZmVmYy00ZDlkLTkzYmEtMmFhMTA1OTAwOGNlIn0.-ta5UQLkJtXNR5yP2dOhDiDMF9dPpbfktAJu7z22kNM"}

在下方编辑!在下面编辑!在下方编辑!

对于未来的访问者 - 我喜欢使用 split 来查找我特别需要的东西。例如,对于我上面遇到的这个问题。我会用

 let myId = string.split(`"itemIds":["`)[1].split('"')[0]

这应该很好用,我一直都在用这个方法。如果您有任何更好的方法,请随时回复或留下答案。您还可以使用 JSON.parse(your data) 并以这种方式查找您的特定变量。本文还应帮助您了解如何使用它。 https://www.tutorialrepublic.com/javascript-tutorial/javascript-json-parsing.php

首先你需要确定你会得到哪个propvalue?然后试试这个,在这种情况下我会得到 "itemIds" 所以我的 findProp 函数将采用 2 个参数:

const myObj = {
  dbSessionTokenMap: {
    CXO_PC_ST:
      'e5b96399-fefc-4d9d-93ba-2aa1059008ce|{"mtoken":"301:12#90271897#2=60818072#7=100439087"}',
  },
  id: "e5b96399-fefc-4d9d-93ba-2aa1059008ce",
  checkoutFlowType: "Guest",
  cartId: "ffd6cb2f-efc2-47b2-96d9-52d2cfb3d69b",
  items: [
    {
      id: "918e337d-82ae-4e91-bdc3-16ad06572e21",
      offerId: "864A02B3BF7442A4802E6DF7BA2EDA28",
      productId: "1ZPTYHZN85S6",
      productName: "Pokemon Assorted Lot of 50 Single Cards [Any Series]",
      itemId: 127446742,
      sellerId: "A577588AB81D43AE9E7F468183B3568A",
      thumbnailUrl:
        "https://i5.walmartimages.com/asr/aa6ed747-9cd0-44dc-b927-44bc2b7e1ca7_1.62c435484d4015af1c325e9cdeeb3662.jpeg?odnHeight=100&odnWidth=100&odnBg=FFFFFF",
      legacySellerId: 3340,
      productClassType: "REGULAR",
      quantity: 1,
      unitPrice: 8.61,
      type: "REGULAR",
      price: 8.61,
      unitOfMeasure: "EA",
      hasCarePlan: false,
      brand: "Pok?mon",
      discount: {},
      rhPath: "20000:25000:25003:25114:25333",
      isWarrantyEligible: false,
      category: "0:4171:3318550:617941:8920388",
      primaryCategory:
        "Home Page/Toys/Shop Toys by Age/Toys for Kids 5 to 7 Years/Toys for Kids 5 to 7 Years",
      isCarePlan: false,
      isEgiftCard: false,
      isAssociateDiscountEligible: false,
      isShippingPassEligible: false,
      isTwoDayShippingEligible: false,
      classId: "5",
      maxQuantityPerOrder: 100,
      isSubstitutable: false,
      isInstaWatch: false,
      isAlcoholic: false,
      isSnapEligible: false,
      isAgeRestricted: false,
      isSubstitutionsAllowed: false,
      fulfillmentSelection: {
        fulfillmentOption: "S2H",
        shipMethod: "STANDARD",
        availableQuantity: 172,
      },
      servicePlanType: "NONE",
      errors: [],
      wfsEnabled: false,
      isAlcohol: false,
    },
  ],
  shipping: { postalCode: "82001", city: "CHEYENNE", state: "WY" },
  promotions: [
    {
      promotionId: "1c2cbad1-205e-425f-9297-8629d68e97f6",
      okToPayAwards: [
        {
          applyTo: "CART_FULFILLMENT_PRICE",
          actionType: "AWARD",
          name: "DS_Donors_Choose_Teachers_Card",
          awardType: "OK_TO_PAY",
          description: "DonorsChoose Card",
          applicableTo: {
            ITEM_TAX: true,
            SHIP_PRICE: true,
            SHIP_TAX: true,
            FEE: true,
            ITEM_PRICE: true,
          },
          asset: {
            image:
              "https://i5.walmartimages.com/dfw/63fd9f59-e0cf/455269aa-c4e8-46a5-8d76-5d4b458e1269/v1/Select_gift_card.png",
            imageAlt: "",
          },
          awardEligibleItemIds: [],
          awardEligibleTotalsByItemId: {},
        },
      ],
      dsEligibleItemIds: [],
      dsEligibleTotals: {},
    },
  ],
  summary: {
    subTotal: 8.61,
    shippingIsEstimate: false,
    taxIsEstimate: true,
    grandTotal: 8.61,
    quantityTotal: 1,
    amountOwed: 8.61,
    merchandisingFeesTotal: 0,
    shippingCosts: [
      {
        label: "Top Cut Central shipping",
        type: "marketplace_shipping",
        cost: 0.0,
      },
    ],
    shippingTotal: 0.0,
    hasSurcharge: false,
    preTaxTotal: 8.61,
    addOnServicesTotal: 0,
    itemsSubTotal: 8.61,
  },
  pickupPeople: [],
  email: "",
  buyer: {
    customerAccountId: "9afb345e-74b8-4afb-93d0-4bf52697e18f",
    isGuestSignupRequired: false,
    isGuest: true,
    isAssociate: false,
    applyAssociateDiscount: false,
  },
  allowedPaymentTypes: [
    { type: "CREDITCARD", cvvRequired: true },
    { type: "PAYPAL", cvvRequired: false },
    { type: "GIFTCARD", cvvRequired: false },
    { type: "VISA_CHECKOUT", cvvRequired: false },
    { type: "MASTERPASS", cvvRequired: false },
    { type: "CHASEPAY", cvvRequired: false },
    { type: "AMEX_CHECKOUT", cvvRequired: false },
  ],
  registries: [],
  payments: [],
  cardsToDisable: [],
  allowedPaymentPreferences: [],
  isRCFEligible: false,
  isMarketPlaceItemsExist: true,
  version: "v3",
  shippingCategory: {
    shippingGroups: [
      {
        itemIds: ["918e337d-82ae-4e91-bdc3-16ad06572e21"],
        seller: "Top Cut Central",
        defaultSelection: true,
        fulfillmentOption: "S2H",
        shippingGroupOptions: [
          {
            method: "EXPEDITED",
            methodDisplay: "Expedited",
            selected: false,
            charge: 8.99,
            deliveryDate: 1606766400000,
            availableDate: 1606766400000,
            fulfillmentOption: "S2H",
            onlineStoreId: 0,
            isThresholdShipMethod: false,
          },
          {
            method: "STANDARD",
            methodDisplay: "Standard",
            selected: true,
            charge: 0.0,
            deliveryDate: 1606939200000,
            availableDate: 1606939200000,
            fulfillmentOption: "S2H",
            onlineStoreId: 0,
            isThresholdShipMethod: false,
          },
        ],
        isEdelivery: false,
        hasWFSItem: false,
        itemSellerGroups: [],
      },
    ],
  },
  entityErrors: [],
  oneDaySelected: false,
  paymentWithBagFee: false,
  giftDetails: {
    giftOrder: false,
    hasGiftEligibleItem: false,
    xoGiftingOptIn: false,
  },
  canApplyDetails: [],
  dbName: "e5b96399-fefc-4d9d-93ba-2aa1059008ce|C",
  jwt:
    "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI1MjdmZTRjYi0wZjI5LTRjZWYtOWRiOS00Yzc1YWQ5MTMwNTQiLCJpYXQiOjE2MDYwOTY0NjMsImlzcyI6IjU3YjM0ZTNhZGE1MjkzMGEwYzBjYTFjOSIsIk9yZ1VuaXRJZCI6IjU2ZWJiMTJkZGE1MjkzMWRhOGZlMDc5YSIsIlJlZmVyZW5jZUlkIjoiZTViOTYzOTktZmVmYy00ZDlkLTkzYmEtMmFhMTA1OTAwOGNlIn0.-ta5UQLkJtXNR5yP2dOhDiDMF9dPpbfktAJu7z22kNM",
};

const findProp = (obj, prop, out) => {
  let i,
    proto = Object.prototype,
    ts = proto.toString,
    hasOwn = proto.hasOwnProperty.bind(obj);

  if ("[object Array]" !== ts.call(out)) {
    out = [];
  }

  for (i in obj) {
    if (hasOwn(i)) {
      if (i === prop) {
        out.push(obj[i]);
      } else if (
        "[object Array]" === ts.call(obj[i]) ||
        "[object Object]" === ts.call(obj[i])
      ) {
        findProp(obj[i], prop, out);
      }
    }
  }
  return out;
};

console.log(findProp(myObj, "itemIds"));