【问题标题】:get specific value from json array inside of array从数组内部的json数组中获取特定值
【发布时间】:2022-01-20 20:46:39
【问题描述】:

我第一次尝试发出 api 请求并获取一些数据并不顺利。

我正在尝试查找 "seed":"1" 值并获取 "0010" 的 "franchise_id" 值

我什至没有成功将任何种子发送到 console.log

这里是json

{
   "version":"1.0",
   "playoffBracket":{
      "bracket_id":"1",
      "playoffRound":[
         {
            "week":"14",
            "playoffGame":[
               {
                  "game_id":"1",
                  "away":{
                     "franchise_id":"0002",
                     "points":"137.2",
                     "seed":"3"
                  },
                  "home":{
                     "franchise_id":"0008",
                     "points":"111.7",
                     "seed":"6"
                  }
               },
               {
                  "game_id":"2",
                  "away":{
                     "franchise_id":"0006",
                     "points":"134.2",
                     "seed":"4"
                  },
                  "home":{
                     "franchise_id":"0011",
                     "points":"130.5",
                     "seed":"5"
                  }
               }
            ]
         },
         {
            "week":"15",
            "playoffGame":[
               {
                  "game_id":"3",
                  "away":{
                     "franchise_id":"0006",
                     "points":"153.3",
                     "winner_of_game":"2"
                  },
                  "home":{
                     "franchise_id":"0010",
                     "points":"162.8",
                     "seed":"1"
                  }
               },
               {
                  "game_id":"4",
                  "away":{
                     "franchise_id":"0002",
                     "points":"95.5",
                     "winner_of_game":"1"
                  },
                  "home":{
                     "franchise_id":"0012",
                     "points":"201.7",
                     "seed":"2"
                  }
               }
            ]
         }
      ]
   },
   "encoding":"utf-8"
}

我可以记录所有数据,或一些内部数据,但没有做太多其他事情

$.ajax({
    url: "apiurlhere",
        success: function (data) {
            console.log(data);
            console.log(data.playoffBracket);
            console.log(data.playoffBracket[0]);
                }
});

【问题讨论】:

标签: javascript jquery json


【解决方案1】:

那是因为您做错了,您的数据中没有playoffBracket[0]。您需要执行以下操作:

data.playoffBracket.playoffRound[0]

要获取特许经营数据,您可以使用以下方法:

data.playoffBracket.playoffRound[0].playoffGame[0].home

或者

data.playoffBracket.playoffRound[0].playoffGame[0].away

获取单个值

data.playoffBracket.playoffRound[0].playoffGame[0].home.franchise_id

查找“seed”:“1”值并获取“0010”的“franchise_id”值的代码

// Method for searching
function findInJson(jsonData, findSeed, getFullObject = false) {
  let ret = null;
  for (let key in jsonData) {
    for (let key2 in jsonData[key]) {
      let awayHomeData = jsonData[key][key2];
      if (Array.isArray(awayHomeData)) {
        for (let key3 in awayHomeData) {
          if (
            awayHomeData[key3].hasOwnProperty("away") ||
            awayHomeData[key3].hasOwnProperty("home")
          ) {
            let homeOrAway = awayHomeData[key3];
            let homeSeed = homeOrAway.home.seed;
            let awaySeed = homeOrAway.away.seed;

            if (findSeed == awaySeed) {
              ret = homeOrAway.away;
            } else if (findSeed == homeSeed) {
              ret = homeOrAway.home;
            }
          }
        }
      }
    }
  }

  if (ret !== null) {
    ret = getFullObject ? ret : ret.franchise_id;
  }

  return ret;
}

// JSON Data
let data = {
  version: "1.0",
  playoffBracket: {
    bracket_id: "1",
    playoffRound: [
      {
        week: "14",
        playoffGame: [
          {
            game_id: "1",
            away: {
              franchise_id: "0002",
              points: "137.2",
              seed: "3",
            },
            home: {
              franchise_id: "0008",
              points: "111.7",
              seed: "6",
            },
          },
          {
            game_id: "2",
            away: {
              franchise_id: "0006",
              points: "134.2",
              seed: "4",
            },
            home: {
              franchise_id: "0011",
              points: "130.5",
              seed: "5",
            },
          },
        ],
      },
      {
        week: "15",
        playoffGame: [
          {
            game_id: "3",
            away: {
              franchise_id: "0006",
              points: "153.3",
              winner_of_game: "2",
            },
            home: {
              franchise_id: "0010",
              points: "162.8",
              seed: "1",
            },
          },
          {
            game_id: "4",
            away: {
              franchise_id: "0002",
              points: "95.5",
              winner_of_game: "1",
            },
            home: {
              franchise_id: "0012",
              points: "201.7",
              seed: "2",
            },
          },
        ],
      },
    ],
  },
  encoding: "utf-8",
};

// How to utilize the method
console.log(findInJson(data.playoffBracket.playoffRound, 22)); //will display null, because 22 doesn't exist
console.log(findInJson(data.playoffBracket.playoffRound, 2)); //will return 0012
console.log(findInJson(data.playoffBracket.playoffRound, 2, true)); //will return JSON object

输出如下:

null
"0012"
{
  franchise_id: "0012",
  points: "201.7",
  seed: "2"
}

解决方案也可以在JSFiddle 上看到。

【讨论】:

  • 好的,所以不知道哪个包含 "seed":"1" 值,我该如何找到它,我是否必须列出每一个项目才能找到它?
  • 当然你必须遍历数据才能找到它,现在你知道如何获取 json 数据了。
  • 好的,所以我只需要无限地列出,因为我不知道会有多少季后赛,所以像这样列出:data.playoffBracket.playoffRound[0].playoffGame[0].home.seed , data.playoffBracket.playoffRound[0].playoffGame[1].home.seed , data.playoffBracket.playoffRound[0].playoffGame[2].home.seed , data.playoffBracket.playoffRound[0].playoffGame[3] .home.seed , data.playoffBracket.playoffRound[0].playoffGame[4].home.seed 等等.....等等....直到我可以匹配种子#1
  • 如果您可以访问后端,那么应该在那里实现过滤器。但如果没有,也许您需要探索用于获取 json 的 API。这绝对应该支持过滤器,即使不支持,也可以无限期地循环它,直到找到所需的数据。或者您将其放在您自己的数据库中并使用查询获取所需的元素。
  • 好吧,现在比我开始时迷路了,哈哈。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
  • 2013-04-04
  • 1970-01-01
  • 2019-07-04
  • 2021-03-25
  • 1970-01-01
相关资源
最近更新 更多