Доступ к вложенным объектам JSON для хранения в таблице базы данных AWS Dynamo - PullRequest
0 голосов
/ 29 сентября 2019

Я ищу доступ к вложенному объекту JSON, который у меня есть, из запроса на отдых, чтобы сохранить его как первичный ключ в моей таблице Dynamo DB на AWS.

Объект Json имеет следующий формат:

{
 "api": {
    "results": 543,
    "fixtures": [
      {
        "fixture_id": 95095,
        "venue": "Estádio Rei Pelé",
        "goalsHomeTeam": 1,
        "goalsAwayTeam": 1,
        "awayTeam": {
          "logo": "https://media.api-football.com/teams/156.png",
          "team_id": 156,
          "team_name": "Sao Bento"
        },
        "event_timestamp": 1569715200,
        "referee": null,
        "elapsed": 90,
        "score": {
          "halftime": "0-0",
          "penalty": null,
          "fulltime": "1-1",
          "extratime": null
        },
        "round": "Regular Season - 25",
        "event_date": "2019-09-29T00:00:00+00:00",
        "statusShort": "FT",
        "homeTeam": {
          "logo": "https://media.api-football.com/teams/146.png",
          "team_id": 146,
          "team_name": "CRB"
        },

И я пытаюсь получить к нему доступ, используя следующий код, но я получаю NullPointerException в строке 38, которая является строкой ниже, начиная с int fixture_id.

Мой кодследующее:

JsonParser parser = new JsonFactory().createParser(new File("fixturesTwo.json"));

    JsonNode rootNode = new ObjectMapper().readTree(parser);
    Iterator<JsonNode> iter = rootNode.iterator();

    ObjectNode currentNode;


    while (iter.hasNext()) {
        currentNode = (ObjectNode) iter.next();

        int fixture_id = currentNode.path("api").findPath("fixtures").findValue("fixture_id").asInt();
        int league_id = currentNode.path("api").findPath("fixtures").findValue("league_id").asInt();

        try {
            table.putItem(new Item().withPrimaryKey("fixture_id", fixture_id, "league_id", league_id)
                    .withJSON("Home Team", currentNode.path("api").findPath("fixtures").findPath("homeTeam").findValue("team_name").toString())
                    .withJSON("Away Team", currentNode.path("api").findPath("fixtures").findPath("awayTeam").findValue("team_name").toString()));
            System.out.println("PutItem succeeded: " + fixture_id + " " + league_id);

        } catch (Exception e) {
            System.err.println("Unable to add: " + fixture_id);
            System.err.println(e.getMessage());
            break;
        }
    }
    parser.close();

}

Я предполагаю, что это что-то похожее на то, что я делаю, я просто не могу понять, что я делаю неправильно.

1 Ответ

1 голос
/ 29 сентября 2019

rootNode имеет узел "API" .currentNode:

{
   "results":543,
   "fixtures":[
      {
         "fixture_id":95095,
         "venue":"Estádio Rei Pelé",
         "goalsHomeTeam":1,
         "goalsAwayTeam":1,
         "awayTeam":{
            "logo":"https://media.api-football.com/teams/156.png",
            "team_id":156,
            "team_name":"Sao Bento"
         },
         "event_timestamp":1569715200,
         "referee":null,
         "elapsed":90,
         "score":{
            "halftime":"0-0",
            "penalty":null,
            "fulltime":"1-1",
            "extratime":null
         },
         "round":"Regular Season - 25",
         "event_date":"2019-09-29T00:00:00+00:00",
         "statusShort":"FT",
         "homeTeam":{
            "logo":"https://media.api-football.com/teams/146.png",
            "team_id":146,
            "team_name":"CRB"
         }
      }
   ]
}

Правильный код:

int fixture_id = currentNode.path("fixtures").findValue("fixture_id").asInt();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...