Package com.jdroid.java.parser.json

Source Code of com.jdroid.java.parser.json.JsonParser

package com.jdroid.java.parser.json;

import java.io.InputStream;
import java.util.List;
import org.slf4j.Logger;
import com.jdroid.java.collections.Lists;
import com.jdroid.java.json.JSONArray;
import com.jdroid.java.json.JSONObject;
import com.jdroid.java.parser.Parser;
import com.jdroid.java.utils.FileUtils;
import com.jdroid.java.utils.LoggerUtils;
import com.jdroid.java.utils.StringUtils;

/**
* JSON input streams parser
*
* @param <T>
*/
public abstract class JsonParser<T> implements Parser {
 
  private static final Logger LOGGER = LoggerUtils.getLogger(JsonParser.class);
  private static final String ARRAY_PREFIX = "[";
 
  /**
   * @see com.jdroid.java.parser.Parser#parse(java.lang.String)
   */
  @SuppressWarnings("unchecked")
  @Override
  public Object parse(String input) {
   
    LOGGER.debug("Parsing started.");
    try {
      LOGGER.trace(input);
     
      // Create a wrapped JsonObject or JsonArray
      T json = null;
      if (input.startsWith(ARRAY_PREFIX)) {
        json = (T)new JSONArray(input);
      } else {
        json = (T)new JSONObject(input);
      }
     
      // Parse the JSONObject
      return parse(json);
    } finally {
      LOGGER.debug("Parsing finished.");
    }
  }
 
  /**
   * @see com.jdroid.java.parser.Parser#parse(java.io.InputStream)
   */
  @Override
  public Object parse(InputStream inputStream) {
    String content = FileUtils.toString(inputStream);
    return StringUtils.isNotBlank(content) ? parse(content) : null;
  }
 
  /**
   * @param json
   * @return The parsed object
   */
  public abstract Object parse(T json);
 
  /**
   * Parses a list of items.
   *
   * @param <ITEM> The item's type.
   *
   * @param jsonObject The {@link JsonObjectWrapper} to parse.
   * @param jsonKey The key for the Json array.
   * @param parser The {@link JsonParser} to parse each list item.
   * @return The parsed list.
   */
  protected <ITEM> List<ITEM> parseList(JSONObject jsonObject, String jsonKey, JsonParser<JSONObject> parser) {
    return parseList(jsonObject.getJSONArray(jsonKey), parser);
  }
 
  /**
   * Parses a list of items.
   *
   * @param <ITEM> The item's type.
   *
   * @param json The {@link JsonArrayWrapper} to parse.
   * @param parser The {@link JsonParser} to parse each list item.
   * @return The parsed list.
   */
  @SuppressWarnings("unchecked")
  protected <ITEM> List<ITEM> parseList(JSONArray jsonArray, JsonParser<JSONObject> parser) {
    List<ITEM> list = Lists.newArrayList();
    if (jsonArray != null) {
      int length = jsonArray.length();
      for (int i = 0; i < length; i++) {
        ITEM parse = (ITEM)parser.parse(jsonArray.getJSONObject(i));
        if (parse != null) {
          list.add(parse);
        }
      }
    }
    return list;
  }
}
TOP

Related Classes of com.jdroid.java.parser.json.JsonParser

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.