public void LoadAreaTableFromFile(string fileName)
    {
        string filePath = Path.Combine(Application.persistentDataPath, fileName);

        if (File.Exists(filePath))
        {
            using (StreamReader streamReader = File.OpenText(filePath)) {
                string jsonData = streamReader.ReadToEnd();
                Debug.LogFormat("jsonData: {0}", jsonData);

//			JsonUtility.FromJson<CharacterData> (jsonString);
                EnemyAreaTableData enemyAreaTableData = JsonToEnemyAreaTableData(jsonData);
                Debug.LogFormat("enemyAreaTableData: {0}", enemyAreaTableData);
                // For each table entry, add the enemy to their designated area(s).
                for (int i = 0; i < enemyAreaTableData.enemyAreaTableEntries.Length; i++)
                {
                    EnemyAreaTableEntry entry = enemyAreaTableData.enemyAreaTableEntries[i];
                    if (entry == null)
                    {
                        continue;                               // Area doesnt contain any data.
                    }
                    EnemyTierEntry[] tierEntries = entry.enemyTierListEntries;
                    for (int j = 0; j < tierEntries.Length; j++)
                    {
                        if (tierEntries[j] == null)
                        {
                            continue;
                        }
                        for (int k = 0; k < tierEntries[j].enemies.Count; k++)
                        {
                            AddEnemyToAreaTable(entry.area, j, entry.enemyTierListEntries[j].enemies[k]);
                        }
                    }
                }
                Debug.LogFormat("loaded area table: {0}", AreaDictionaryToJson(areaTable));
            }
//			string jsonData = File.ReadAllText (filePath);
//			EnemyAreaTableData enemyAreaTableData = JsonToEnemyAreaTableData(jsonData);
////			Debug.LogFormat("enemyAreaTableData: {0}", enemyAreaTableData);
//			// For each table entry, add the enemy to their designated area(s).
//			for (int i = 0; i < enemyAreaTableData.enemyAreaTableEntries.Length; i++) {
//				EnemyAreaTableEntry entry = enemyAreaTableData.enemyAreaTableEntries[i];
//				EnemyTierEntry[] tierEntries = entry.enemyTierListEntries;
//				for (int j = 0; j < tierEntries.Length; j++) {
//					if(tierEntries[j] == null) continue;
//					for (int k = 0; k < tierEntries[j].enemies.Count; k++) {
//						AddEnemyToAreaTable(entry.area, j, entry.enemyTierListEntries[j].enemies[k]);
//					}
//				}
//			}
//			Debug.LogFormat("loaded area table: {0}", AreaDictionaryToJson(areaTable));
        }
        else
        {
            Debug.LogFormat("File {0} was not found.", fileName);
        }
    }
    private EnemyAreaTableData JsonToEnemyAreaTableData(string jsonData)
    {
        JSONNode  node  = JSON.Parse(jsonData);
        JSONArray areas = node["areaTableEntries"].AsArray;

        Debug.LogFormat("areas.Count {0}", areas.Count);
        EnemyAreaTableData result = new EnemyAreaTableData {
            enemyAreaTableEntries = new EnemyAreaTableEntry[areaCount]
        };

        // For each area in the json file...
        foreach (var area in areas)
        {
            JSONNode            areaInfo = area.Value;
            WorldArea           areaName = (WorldArea)areaInfo["area"].AsInt;   // Get area
            JSONArray           tierList = areaInfo["enemyTiers"].AsArray;      // Get the areas tier list
            EnemyAreaTableEntry enemyAreaTableEntry
                = new EnemyAreaTableEntry {
                area = areaName, enemyTierListEntries = new EnemyTierEntry[MAX_LEVELS]
                };
            // For each table entry
            foreach (var tierListInfo in tierList)
            {
                JSONNode  tierInfo = tierListInfo.Value;
                int       tier     = tierInfo["tier"];                                  // Get the tier
                JSONArray enemies  = tierInfo["enemies"].AsArray;                       // Get the enemy list
                enemyAreaTableEntry.enemyTierListEntries[tier] = new EnemyTierEntry {
                    enemies = new List <string>()
                };
                foreach (var enemy in enemies)
                {
                    enemyAreaTableEntry.enemyTierListEntries[tier].enemies.Add(enemy.Value);                            // Add enemies to the list
                }
            }
            Debug.LogFormat("areaName {0}, {1}", areaName, result.enemyAreaTableEntries[(int)areaName]);
            result.enemyAreaTableEntries[(int)areaName] = enemyAreaTableEntry;                  // Add the table entry to the area
        }
        return(result);
    }