public static Site parseSiteInfo(String json) throws JSONException {
    Site site = null;

    JSONObject siteInfoObject = new JSONObject(json);
    site = parseSite(siteInfoObject);

    JSONObject types = (JSONObject) siteInfoObject.get("guide-types");
    site.mGuideTypes = new ArrayList<GuideType>();

    Iterator<?> keys = types.keys();
    while (keys.hasNext()) {
      String key = (String) keys.next();
      if (types.get(key) instanceof JSONObject) {
        site.mGuideTypes.add(parseGuideType(key, (JSONObject) types.get(key)));
      }
    }

    return site;
  }
  /** Reads through the given JSONObject and adds any topics to the given topic. */
  private static ArrayList<TopicNode> parseTopicChildren(JSONObject jTopic) throws JSONException {
    // Don't allocate any lists if it's empty.
    if (jTopic.length() == 0) {
      return null;
    }

    @SuppressWarnings("unchecked")
    Iterator<String> iterator = jTopic.keys();
    String topicName;
    ArrayList<TopicNode> topics = new ArrayList<TopicNode>();
    TopicNode currentTopic;

    while (iterator.hasNext()) {
      topicName = iterator.next();

      currentTopic = new TopicNode(topicName);
      currentTopic.setChildren(parseTopicChildren(jTopic.getJSONObject(topicName)));

      topics.add(currentTopic);
    }

    return topics;
  }