Как пройти через JSON и получить данные? - PullRequest
0 голосов
/ 14 августа 2011

Привет, у меня есть локальный файл JSON для футбольных результатов.Как бы я зациклился, если бы он получал определенное количество очков или название команды, используя JavaScript?

Ниже приводится JSON:

{
   "w": 1,
   "t": "PRE",
   "gms":    [
            {
         "d": "Thu",
         "gsis": 55425,
         "h": "NE",
         "vnn": "Jaguars",
         "q": "F",
         "vs": 12,
         "v": "JAC",
         "rz": -1,
         "hs": 47,
         "hnn": "Patriots",
         "t": "7:30",
         "ga": "",
         "eid": 2011081152
      },
            {
         "d": "Thu",
         "gsis": 55424,
         "h": "PHI",
         "vnn": "Ravens",
         "q": "F",
         "vs": 6,
         "v": "BAL",
         "rz": -1,
         "hs": 13,
         "hnn": "Eagles",
         "t": "7:30",
         "ga": "",
         "eid": 2011081151
      },
            {
         "d": "Thu",
         "gsis": 55423,
         "h": "SD",
         "vnn": "Seahawks",
         "q": "F",
         "vs": 24,
         "v": "SEA",
         "rz": -1,
         "hs": 17,
         "hnn": "Chargers",
         "t": "8:00",
         "ga": "",
         "eid": 2011081153
      },
            {
         "d": "Thu",
         "gsis": 55426,
         "h": "DAL",
         "vnn": "Broncos",
         "q": "F",
         "vs": 23,
         "v": "DEN",
         "rz": -1,
         "hs": 24,
         "hnn": "Cowboys",
         "t": "8:30",
         "ga": "",
         "eid": 2011081154
      },
            {
         "d": "Thu",
         "gsis": 55427,
         "h": "OAK",
         "vnn": "Cardinals",
         "q": "F",
         "vs": 24,
         "v": "ARI",
         "rz": -1,
         "hs": 18,
         "hnn": "Raiders",
         "t": "10:00",
         "ga": "",
         "eid": 2011081155
      },
            {
         "d": "Fri",
         "gsis": 55430,
         "h": "ATL",
         "vnn": "Dolphins",
         "q": "F",
         "vs": 28,
         "v": "MIA",
         "rz": -1,
         "hs": 23,
         "hnn": "Falcons",
         "t": "7:30",
         "ga": "",
         "eid": 2011081252
      },
            {
         "d": "Fri",
         "gsis": 55429,
         "h": "DET",
         "vnn": "Bengals",
         "q": "F",
         "vs": 3,
         "v": "CIN",
         "rz": -1,
         "hs": 34,
         "hnn": "Lions",
         "t": "7:30",
         "ga": "",
         "eid": 2011081251
      },
            {
         "d": "Fri",
         "gsis": 55431,
         "h": "WAS",
         "vnn": "Steelers",
         "q": "F",
         "vs": 7,
         "v": "PIT",
         "rz": -1,
         "hs": 16,
         "hnn": "Redskins",
         "t": "7:30",
         "ga": "",
         "eid": 2011081253
      },
            {
         "d": "Fri",
         "gsis": 55428,
         "h": "KC",
         "vnn": "Buccaneers",
         "q": "F",
         "vs": 25,
         "v": "TB",
         "rz": -1,
         "hs": 0,
         "hnn": "Chiefs",
         "t": "8:00",
         "ga": "",
         "eid": 2011081255
      },
            {
         "d": "Fri",
         "gsis": 55432,
         "h": "NO",
         "vnn": "49ers",
         "q": "F",
         "vs": 3,
         "v": "SF",
         "rz": -1,
         "hs": 24,
         "hnn": "Saints",
         "t": "8:00",
         "ga": "",
         "eid": 2011081254
      },
            {
         "d": "Sat",
         "gsis": 55433,
         "h": "CLE",
         "vnn": "Packers",
         "q": "F",
         "vs": 17,
         "v": "GB",
         "rz": -1,
         "hs": 27,
         "hnn": "Browns",
         "t": "7:30",
         "ga": "",
         "eid": 2011081351
      },
            {
         "d": "Sat",
         "gsis": 55437,
         "h": "CAR",
         "vnn": "Giants",
         "q": "F",
         "vs": 10,
         "v": "NYG",
         "rz": -1,
         "hs": 20,
         "hnn": "Panthers",
         "t": "8:00",
         "ga": "",
         "eid": 2011081355
      },
            {
         "d": "Sat",
         "gsis": 55434,
         "h": "CHI",
         "vnn": "Bills",
         "q": "F",
         "vs": 3,
         "v": "BUF",
         "rz": -1,
         "hs": 10,
         "hnn": "Bears",
         "t": "8:00",
         "ga": "",
         "eid": 2011081352
      },
            {
         "d": "Sat",
         "gsis": 55435,
         "h": "STL",
         "vnn": "Colts",
         "q": "F",
         "vs": 10,
         "v": "IND",
         "rz": -1,
         "hs": 33,
         "hnn": "Rams",
         "t": "8:00",
         "ga": "",
         "eid": 2011081353
      },
            {
         "d": "Sat",
         "gsis": 55436,
         "h": "TEN",
         "vnn": "Vikings",
         "q": "F",
         "vs": 3,
         "v": "MIN",
         "rz": -1,
         "hs": 14,
         "hnn": "Titans",
         "t": "8:00",
         "ga": "",
         "eid": 2011081354
      },
            {
         "d": "Mon",
         "gsis": 55438,
         "h": "HOU",
         "vnn": "Jets",
         "q": "P",
         "vs": 0,
         "v": "NYJ",
         "rz": -1,
         "hs": 0,
         "hnn": "Texans",
         "t": "8:00",
         "ga": "",
         "eid": 2011081551
      }
   ],
   "y": 2011,
   "gd": "0"
}

Извините, ребята, я все еще учусь и хочу научиться этому.

Так я бы сделал

eval (JSONfile) ??Я не уверен, что делать здесь, чтобы разобрать и прочитать это?

Ответы [ 2 ]

1 голос
/ 14 августа 2011

Чтобы разобрать его, вы можете использовать .eval(), как вы отметили в своем вопросе.

Лучше использовать синтаксический анализатор JSON. В современных браузерах это встроено:

var js_obj = JSON.parse( my_json );

Для браузеров, которые не поддерживают JSON.parse, вы можете включить библиотеку json2 , которая добавит .parse и .stringify.

Затем просто перечислите оператор for-in (или оператор for для массивов), как вы это обычно делаете.

0 голосов
/ 14 августа 2011

Изменить: Извините, не сказал вам, как читать в строке JSON.

Если вы пишете строку прямо в JavaScipt, например, с PHP вы можете просто установить его как переменную:

var scores = <?php echo $scoresJSON ?>

Если он хранится в JavaScript в виде строки, вы можете использовать JSON.parse, если он поддерживается, в противном случае eval:

var scores = {};
if(typeof(JSON) === 'object') { scores = JSON.parse(jsonString); }
else { scores = eval(jsonString); }

Или вы можете использовать методы jQuery.

Ссылки:
http://api.jquery.com/jQuery.parseJSON/
https://developer.mozilla.org/En/Using_native_JSON#Parsing_JSON.c2.a0strings

Что касается затем использования данных:

/**
 * Return array of all scores for a team acronym
 * E.g. for MIN it would return: [3]
 * If the same team had multiple games it would return scores for all games.
 * E.g.: [3, 6, 0, 23]
 */
function getScoresForTeam(teamAcronym, scoresObject) {
    // Create scores array, to populate later
    var scores = [];

    // Look through each game in JSON
    for(i = 0; i < jsonString.gms.length; i++) {
        var thisGame = jsonString.gms[i]
        // Check if they were team 'v'
        if(thisGame.v === teamAcronym) {
            scores.push(thisGame.vs);
        } else if(thisGame.h === teamAcronym) {
            scores.push(thisGame.hs);
        }
    }

    // Return scores array
    return scores;
}

Я проверял это в браузере (Chrome):

> getScoresForTeam('MIN',scores);
> [3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...