package cn.alphabets.light.network; import android.net.Uri; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.Iterator; import cn.alphabets.light.log.Logger; /** * 将json转换为query parameter * Created by lin on 14/12/4. */ public class ParameterQueryParser { /** * 获取GET请求用Query参数 * @param object * @return * @throws org.json.JSONException */ public static String parse(JSONObject object) { Uri.Builder builder = new Uri.Builder(); parse(object, builder); return builder.build().toString(); } /** * 获取GET请求用Query参数 * @param object * @param builder * @throws org.json.JSONException */ public static void parse(JSONObject object, Uri.Builder builder) { try { parseHash(object, builder, null); } catch (JSONException e) { Logger.e(e); throw new RuntimeException("Converting object failed."); } } private static void parseHash(JSONObject object, Uri.Builder builder, String parent) throws JSONException { Iterator<String> keys = object.keys(); while (keys.hasNext()) { String key = keys.next(); Object val = object.get(key); String name = parent == null ? key : parent + "[" + key + "]"; // 数组 if (val instanceof JSONArray) { parseArray((JSONArray) val, builder, name); } // 对象 if (val instanceof JSONObject) { parseHash((JSONObject) val, builder, name); } // 其他 if (val instanceof String || isBasicType(val)) { builder.appendQueryParameter(name, String.valueOf(val)); } } } private static void parseArray(JSONArray array, Uri.Builder builder, String parent) throws JSONException { for (int i = 0; i < array.length(); i++) { Object val = array.get(i); String name = parent + "[" + String.valueOf(i) + "]"; // 对象 if (val instanceof JSONObject) { parseHash((JSONObject) val, builder, name); } // 其他 if (val instanceof String || isBasicType(val)) { builder.appendQueryParameter(name, String.valueOf(val)); } } } public static boolean isBasicType(Object value) { return value instanceof Double || value instanceof Boolean || value instanceof Integer || value instanceof Long; } }