zoukankan      html  css  js  c++  java
  • Gson解析Json数组

    需求:从steam官网获取英雄数据,即为Json数据,并导入到本地数据库

    Json数据是这样的

    {
      "result": {
        "heroes": [
          {
            "name": "npc_dota_hero_antimage",
            "id": 1,
            "localized_name": "Anti-Mage"
          },
          {
            "name": "npc_dota_hero_axe",
            "id": 2,
            "localized_name": "Axe"
          },
          {
            "name": "npc_dota_hero_bane",
            "id": 3,
            "localized_name": "Bane"
          },
          {
            "name": "npc_dota_hero_bloodseeker",
            "id": 4,
            "localized_name": "Bloodseeker"
          },
          {
            "name": "npc_dota_hero_crystal_maiden",
            "id": 5,
            "localized_name": "Crystal Maiden"
          },
          {
            "name": "npc_dota_hero_drow_ranger",
            "id": 6,
            "localized_name": "Drow Ranger"
          },
          {
            "name": "npc_dota_hero_earthshaker",
            "id": 7,
            "localized_name": "Earthshaker"
          },
          {
            "name": "npc_dota_hero_juggernaut",
            "id": 8,
            "localized_name": "Juggernaut"
          },
          {
            "name": "npc_dota_hero_mirana",
            "id": 9,
            "localized_name": "Mirana"
          },
          {
            "name": "npc_dota_hero_nevermore",
            "id": 11,
            "localized_name": "Shadow Fiend"
          },
          {
            "name": "npc_dota_hero_morphling",
            "id": 10,
            "localized_name": "Morphling"
          },
          {
            "name": "npc_dota_hero_phantom_lancer",
            "id": 12,
            "localized_name": "Phantom Lancer"
          },
          {
            "name": "npc_dota_hero_puck",
            "id": 13,
            "localized_name": "Puck"
          },
          {
            "name": "npc_dota_hero_pudge",
            "id": 14,
            "localized_name": "Pudge"
          },
          {
            "name": "npc_dota_hero_razor",
            "id": 15,
            "localized_name": "Razor"
          },
          {
            "name": "npc_dota_hero_sand_king",
            "id": 16,
            "localized_name": "Sand King"
          },
          {
            "name": "npc_dota_hero_storm_spirit",
            "id": 17,
            "localized_name": "Storm Spirit"
          },
          {
            "name": "npc_dota_hero_sven",
            "id": 18,
            "localized_name": "Sven"
          },
          {
            "name": "npc_dota_hero_tiny",
            "id": 19,
            "localized_name": "Tiny"
          },
          {
            "name": "npc_dota_hero_vengefulspirit",
            "id": 20,
            "localized_name": "Vengeful Spirit"
          },
          {
            "name": "npc_dota_hero_windrunner",
            "id": 21,
            "localized_name": "Windranger"
          },
          {
            "name": "npc_dota_hero_zuus",
            "id": 22,
            "localized_name": "Zeus"
          },
          {
            "name": "npc_dota_hero_kunkka",
            "id": 23,
            "localized_name": "Kunkka"
          },
          {
            "name": "npc_dota_hero_lina",
            "id": 25,
            "localized_name": "Lina"
          },
          {
            "name": "npc_dota_hero_lich",
            "id": 31,
            "localized_name": "Lich"
          },
          {
            "name": "npc_dota_hero_lion",
            "id": 26,
            "localized_name": "Lion"
          },
          {
            "name": "npc_dota_hero_shadow_shaman",
            "id": 27,
            "localized_name": "Shadow Shaman"
          },
          {
            "name": "npc_dota_hero_slardar",
            "id": 28,
            "localized_name": "Slardar"
          },
          {
            "name": "npc_dota_hero_tidehunter",
            "id": 29,
            "localized_name": "Tidehunter"
          },
          {
            "name": "npc_dota_hero_witch_doctor",
            "id": 30,
            "localized_name": "Witch Doctor"
          },
          {
            "name": "npc_dota_hero_riki",
            "id": 32,
            "localized_name": "Riki"
          },
          {
            "name": "npc_dota_hero_enigma",
            "id": 33,
            "localized_name": "Enigma"
          },
          {
            "name": "npc_dota_hero_tinker",
            "id": 34,
            "localized_name": "Tinker"
          },
          {
            "name": "npc_dota_hero_sniper",
            "id": 35,
            "localized_name": "Sniper"
          },
          {
            "name": "npc_dota_hero_necrolyte",
            "id": 36,
            "localized_name": "Necrophos"
          },
          {
            "name": "npc_dota_hero_warlock",
            "id": 37,
            "localized_name": "Warlock"
          },
          {
            "name": "npc_dota_hero_beastmaster",
            "id": 38,
            "localized_name": "Beastmaster"
          },
          {
            "name": "npc_dota_hero_queenofpain",
            "id": 39,
            "localized_name": "Queen of Pain"
          },
          {
            "name": "npc_dota_hero_venomancer",
            "id": 40,
            "localized_name": "Venomancer"
          },
          {
            "name": "npc_dota_hero_faceless_void",
            "id": 41,
            "localized_name": "Faceless Void"
          },
          {
            "name": "npc_dota_hero_skeleton_king",
            "id": 42,
            "localized_name": "Wraith King"
          },
          {
            "name": "npc_dota_hero_death_prophet",
            "id": 43,
            "localized_name": "Death Prophet"
          },
          {
            "name": "npc_dota_hero_phantom_assassin",
            "id": 44,
            "localized_name": "Phantom Assassin"
          },
          {
            "name": "npc_dota_hero_pugna",
            "id": 45,
            "localized_name": "Pugna"
          },
          {
            "name": "npc_dota_hero_templar_assassin",
            "id": 46,
            "localized_name": "Templar Assassin"
          },
          {
            "name": "npc_dota_hero_viper",
            "id": 47,
            "localized_name": "Viper"
          },
          {
            "name": "npc_dota_hero_luna",
            "id": 48,
            "localized_name": "Luna"
          },
          {
            "name": "npc_dota_hero_dragon_knight",
            "id": 49,
            "localized_name": "Dragon Knight"
          },
          {
            "name": "npc_dota_hero_dazzle",
            "id": 50,
            "localized_name": "Dazzle"
          },
          {
            "name": "npc_dota_hero_rattletrap",
            "id": 51,
            "localized_name": "Clockwerk"
          },
          {
            "name": "npc_dota_hero_leshrac",
            "id": 52,
            "localized_name": "Leshrac"
          },
          {
            "name": "npc_dota_hero_furion",
            "id": 53,
            "localized_name": "Nature's Prophet"
          },
          {
            "name": "npc_dota_hero_life_stealer",
            "id": 54,
            "localized_name": "Lifestealer"
          },
          {
            "name": "npc_dota_hero_dark_seer",
            "id": 55,
            "localized_name": "Dark Seer"
          },
          {
            "name": "npc_dota_hero_clinkz",
            "id": 56,
            "localized_name": "Clinkz"
          },
          {
            "name": "npc_dota_hero_omniknight",
            "id": 57,
            "localized_name": "Omniknight"
          },
          {
            "name": "npc_dota_hero_enchantress",
            "id": 58,
            "localized_name": "Enchantress"
          },
          {
            "name": "npc_dota_hero_huskar",
            "id": 59,
            "localized_name": "Huskar"
          },
          {
            "name": "npc_dota_hero_night_stalker",
            "id": 60,
            "localized_name": "Night Stalker"
          },
          {
            "name": "npc_dota_hero_broodmother",
            "id": 61,
            "localized_name": "Broodmother"
          },
          {
            "name": "npc_dota_hero_bounty_hunter",
            "id": 62,
            "localized_name": "Bounty Hunter"
          },
          {
            "name": "npc_dota_hero_weaver",
            "id": 63,
            "localized_name": "Weaver"
          },
          {
            "name": "npc_dota_hero_jakiro",
            "id": 64,
            "localized_name": "Jakiro"
          },
          {
            "name": "npc_dota_hero_batrider",
            "id": 65,
            "localized_name": "Batrider"
          },
          {
            "name": "npc_dota_hero_chen",
            "id": 66,
            "localized_name": "Chen"
          },
          {
            "name": "npc_dota_hero_spectre",
            "id": 67,
            "localized_name": "Spectre"
          },
          {
            "name": "npc_dota_hero_doom_bringer",
            "id": 69,
            "localized_name": "Doom"
          },
          {
            "name": "npc_dota_hero_ancient_apparition",
            "id": 68,
            "localized_name": "Ancient Apparition"
          },
          {
            "name": "npc_dota_hero_ursa",
            "id": 70,
            "localized_name": "Ursa"
          },
          {
            "name": "npc_dota_hero_spirit_breaker",
            "id": 71,
            "localized_name": "Spirit Breaker"
          },
          {
            "name": "npc_dota_hero_gyrocopter",
            "id": 72,
            "localized_name": "Gyrocopter"
          },
          {
            "name": "npc_dota_hero_alchemist",
            "id": 73,
            "localized_name": "Alchemist"
          },
          {
            "name": "npc_dota_hero_invoker",
            "id": 74,
            "localized_name": "Invoker"
          },
          {
            "name": "npc_dota_hero_silencer",
            "id": 75,
            "localized_name": "Silencer"
          },
          {
            "name": "npc_dota_hero_obsidian_destroyer",
            "id": 76,
            "localized_name": "Outworld Devourer"
          },
          {
            "name": "npc_dota_hero_lycan",
            "id": 77,
            "localized_name": "Lycan"
          },
          {
            "name": "npc_dota_hero_brewmaster",
            "id": 78,
            "localized_name": "Brewmaster"
          },
          {
            "name": "npc_dota_hero_shadow_demon",
            "id": 79,
            "localized_name": "Shadow Demon"
          },
          {
            "name": "npc_dota_hero_lone_druid",
            "id": 80,
            "localized_name": "Lone Druid"
          },
          {
            "name": "npc_dota_hero_chaos_knight",
            "id": 81,
            "localized_name": "Chaos Knight"
          },
          {
            "name": "npc_dota_hero_meepo",
            "id": 82,
            "localized_name": "Meepo"
          },
          {
            "name": "npc_dota_hero_treant",
            "id": 83,
            "localized_name": "Treant Protector"
          },
          {
            "name": "npc_dota_hero_ogre_magi",
            "id": 84,
            "localized_name": "Ogre Magi"
          },
          {
            "name": "npc_dota_hero_undying",
            "id": 85,
            "localized_name": "Undying"
          },
          {
            "name": "npc_dota_hero_rubick",
            "id": 86,
            "localized_name": "Rubick"
          },
          {
            "name": "npc_dota_hero_disruptor",
            "id": 87,
            "localized_name": "Disruptor"
          },
          {
            "name": "npc_dota_hero_nyx_assassin",
            "id": 88,
            "localized_name": "Nyx Assassin"
          },
          {
            "name": "npc_dota_hero_naga_siren",
            "id": 89,
            "localized_name": "Naga Siren"
          },
          {
            "name": "npc_dota_hero_keeper_of_the_light",
            "id": 90,
            "localized_name": "Keeper of the Light"
          },
          {
            "name": "npc_dota_hero_wisp",
            "id": 91,
            "localized_name": "Io"
          },
          {
            "name": "npc_dota_hero_visage",
            "id": 92,
            "localized_name": "Visage"
          },
          {
            "name": "npc_dota_hero_slark",
            "id": 93,
            "localized_name": "Slark"
          },
          {
            "name": "npc_dota_hero_medusa",
            "id": 94,
            "localized_name": "Medusa"
          },
          {
            "name": "npc_dota_hero_troll_warlord",
            "id": 95,
            "localized_name": "Troll Warlord"
          },
          {
            "name": "npc_dota_hero_centaur",
            "id": 96,
            "localized_name": "Centaur Warrunner"
          },
          {
            "name": "npc_dota_hero_magnataur",
            "id": 97,
            "localized_name": "Magnus"
          },
          {
            "name": "npc_dota_hero_shredder",
            "id": 98,
            "localized_name": "Timbersaw"
          },
          {
            "name": "npc_dota_hero_bristleback",
            "id": 99,
            "localized_name": "Bristleback"
          },
          {
            "name": "npc_dota_hero_tusk",
            "id": 100,
            "localized_name": "Tusk"
          },
          {
            "name": "npc_dota_hero_skywrath_mage",
            "id": 101,
            "localized_name": "Skywrath Mage"
          },
          {
            "name": "npc_dota_hero_abaddon",
            "id": 102,
            "localized_name": "Abaddon"
          },
          {
            "name": "npc_dota_hero_elder_titan",
            "id": 103,
            "localized_name": "Elder Titan"
          },
          {
            "name": "npc_dota_hero_legion_commander",
            "id": 104,
            "localized_name": "Legion Commander"
          },
          {
            "name": "npc_dota_hero_ember_spirit",
            "id": 106,
            "localized_name": "Ember Spirit"
          },
          {
            "name": "npc_dota_hero_earth_spirit",
            "id": 107,
            "localized_name": "Earth Spirit"
          },
          {
            "name": "npc_dota_hero_terrorblade",
            "id": 109,
            "localized_name": "Terrorblade"
          },
          {
            "name": "npc_dota_hero_phoenix",
            "id": 110,
            "localized_name": "Phoenix"
          },
          {
            "name": "npc_dota_hero_oracle",
            "id": 111,
            "localized_name": "Oracle"
          },
          {
            "name": "npc_dota_hero_techies",
            "id": 105,
            "localized_name": "Techies"
          },
          {
            "name": "npc_dota_hero_winter_wyvern",
            "id": 112,
            "localized_name": "Winter Wyvern"
          },
          {
            "name": "npc_dota_hero_arc_warden",
            "id": 113,
            "localized_name": "Arc Warden"
          },
          {
            "name": "npc_dota_hero_abyssal_underlord",
            "id": 108,
            "localized_name": "Underlord"
          },
          {
            "name": "npc_dota_hero_monkey_king",
            "id": 114,
            "localized_name": "Monkey King"
          },
          {
            "name": "npc_dota_hero_pangolier",
            "id": 120,
            "localized_name": "Pangolier"
          },
          {
            "name": "npc_dota_hero_dark_willow",
            "id": 119,
            "localized_name": "Dark Willow"
          }
        ],
        "status": 200,
        "count": 115
      }
    }
    View Code

    我们用这个封装方法来解析Json数组

    public static <T> List<T> getObjectList(String jsonString,Class<T> cls){
            List<T> list = new ArrayList<T>();
            try {
                Gson gson = new Gson();
                JsonArray arry = new JsonParser().parse(jsonString).getAsJsonArray();
                for (JsonElement jsonElement : arry) {
                    list.add(gson.fromJson(jsonElement, cls));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return list;
        }

    用这个方法来对URL进行解析和设置

    public static String getUrlForHero(String strURL) throws IOException {
            URL url = new URL(strURL);
            HttpURLConnection httpConn = (HttpURLConnection)
                    url.openConnection();
            httpConn.setRequestMethod("GET");
            httpConn.connect();
    
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    httpConn.getInputStream()));
            String line;
            StringBuffer buffer = new StringBuffer();
            while ((line = reader.readLine()) != null) {
                buffer.append(line);
            }
            reader.close();
            httpConn.disconnect();
    
            String result = new String(buffer.substring(20,buffer.length()-27));//这里把不用的数据去掉,保留heroes之后的数组,status,count不要。
            //JSONArray jsonArray = JSONArray.fromObject(result);
            return result;
        }

    最后这样调用

    private void addHeroFromSteamAPI() throws IOException {
            String jsonArray = URLUtil.getUrlForHero("https://api.steampowered.com/IEconDOTA2_570/GetHeroes/v1/?key=id&format=json&language=Chinese");
            List<Hero> heroes = GsonUtil.getObjectList(jsonArray,Hero.class);
            for (Hero hero:heroes){
                HeroBean heroBean = new HeroBean();
                heroBean.setId(hero.getId());
                heroBean.setName(hero.getName());
                heroBean.setLocalizedName(hero.getLocalized_name());
                heroService.addHeroFromSteamAPI(heroBean);
            }
    
        }
  • 相关阅读:
    oracle 10g正则表达式REGEXP_LIKE用法
    impdp时出现ORA-39125错误的解决方法
    使用rman恢复备份集到不同的主机上
    ORA-01110: data file 1: '/opt/ora10g/oradata/orcla/system01.dbf'错误
    Oracle模拟文件损坏BBED
    RMAN进行基于数据块的恢复
    转:Java中Image的水平翻转、缩放与自由旋转操作
    hue耗流量优化
    解决hue/hiveserver2对于hive date类型显示为NULL的问题
    解决kylin sync table报错:MetaException(message:java.lang.ClassNotFoundException Class org.apache.hive.hcatalog.data.JsonSerDe not found
  • 原文地址:https://www.cnblogs.com/Java-Starter/p/7990001.html
Copyright © 2011-2022 走看看