安卓json解析 问题

{
    "code": 1,
    "msg": "登录成功",
    "data": {
        "user_id": "179",
        "user_name": null,
        "phone": "15557230582",
        "password": "123456",
        "time": "1502345194",
        "gender": "0",
        "avatar": "",
        "status": "1",
        "category": "",
        "u_place": null
    }
}

这样的json 怎么解析 用fastjson
关键是 data里面的数据

需要定义两个实体类吗?
需要取的data里面的数据
我是安卓小白

阅读 2.5k
2 个回答

实体嵌入实体就行了。

外层的 Result 建议定义成泛型,比如:

public class Result<T> {
    int code;
    String msg;
    T data;
}

然后 Data 定义成一个实体(比如是 Data.java),解析的时候 TypeToken 使用 Result<Data>,这样的好处是遇到其他数据结构的 Data(比如是 AnotherData),只需要用 Result<AnotherData> 就行了。

另推荐 JSON 自动生成 Java Bean 代码的 Android Studio 插件:GsonFormat。

首先在app下的build.gradle中引入 compile 'com.alibaba:fastjson:1.1.44.android'
我这里有一个公共工具类类JSONUtil,可以直接调用:
public class JSONUtil {

public static <T> T getData(String key, String jsonString, Class<T> cls) {
    return JSON.parseObject(getJSONString(key, jsonString), cls);
}

public static <T> T getData(String jsonString, Class<T> cls) {
    return JSONObject.parseObject(jsonString, cls);
}

public static <T> List<T> getList(String jsonString, Class<T> clszz) {
    return JSONArray.parseArray(jsonString, clszz);
}

public static <T> List<T> getList(String key, String jsonString, Class<T> cls) {
    return JSONArray.parseArray(getJSONString(key, jsonString), cls);
}

public static List<String> getList(String key, String jsonString) {
    return getListString(getJSONString(key, jsonString));
}

public static List<Map<String,Object>> getListMap(String key, String jsonString) {
    return getListMap(getJSONString(key, jsonString));
}

public static String getJSONString(String key, String jsonStringString) {
    return JSONObject.parseObject(jsonStringString).getString(key);
}

public static <T> Map<String, List<T>> getKeyMap(String successResult, Class<T> clszz) {
    Map<String, List<T>> map = new HashMap<String, List<T>>();
    try {
        JSONObject userJsonObj = JSONObject.parseObject(successResult);
        Set<String> setString = userJsonObj.keySet();
        for (String key : setString) {
            map.put(key, getList(key, successResult, clszz));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return map;
}

public static <T> List<T> getListFromKey(String successResult, Class<T> clszz) {
    List<T> list = new ArrayList<T>();
    try {
        JSONObject userJsonObj = JSONObject.parseObject(successResult);
        Set<String> setString = userJsonObj.keySet();
        for (String key : setString) {
            list.addAll(getList(key, successResult, clszz));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return list;
}

/**
 * 获取嵌套的list
 *
 * @param successResult
 * @param clszz
 * @return
 */
public static <T> List<List<T>> getExpandList(String successResult, Class<T> clszz) {
    List<List<T>> list = new ArrayList<List<T>>();
    try {
        JSONArray array = JSONArray.parseArray(successResult);
        if (array != null) {
            for (int i = 0; i < array.size(); i++) {
                list.add(getList(array.getString(i), clszz));
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return list;
}
public static <T> List<T> getListFromKeyMap(String successResult, Class<T> clszz) {
    List<T> list = new ArrayList<T>();
    Map<String, List<T>> map = getKeyMap(successResult, clszz);
    if (map != null) {
        for (Map.Entry<String, List<T>> mapSet : map.entrySet()) {
            list.addAll(mapSet.getValue());
        }
    }
    return list;
}

public static <T> List<T> paserAllFriends(String ectityResult, Class<T> clszz) {
    List<T> allListUser = new ArrayList<T>();
    JSONObject jsonObject = JSONObject.parseObject(ectityResult);
    Set<String> key = jsonObject.keySet();
    for (String resultKey : key) {
        List<T> listUser = getListFromKeyMap(getJSONString(resultKey, ectityResult), clszz);
        allListUser.addAll(listUser);
    }
    return allListUser;
}

public static <T> Map<String, T> getMap(String jsonString, Class<T> clszz, String... keys) {
    Map<String, T> map = new HashMap<String, T>();
    JSONObject jObject = JSONObject.parseObject(jsonString);
    for (String key : keys) {
        map.put(key, jObject.getObject(key, clszz));
    }
    return map;
}

public static Map<String, Object> getMap(String jsonString) {
    org.json.JSONObject jsonObject;
    try {
        jsonObject = new org.json.JSONObject(jsonString);
        @SuppressWarnings("unchecked")
        Iterator<String> keyIter = jsonObject.keys();
        String key;
        Object value;
        Map<String, Object> valueMap = new HashMap<String, Object>();
        while (keyIter.hasNext()) {
            key = keyIter.next();
            value = jsonObject.get(key);
            valueMap.put(key, value);
        }
        return valueMap;
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return null;
}

/**
 * 把json 转换为 ArrayList 形式
 *
 * @return
 */
public static List<Map<String, Object>> getList(String jsonString) {
    List<Map<String, Object>> list = null;
    try {

        org.json.JSONArray jsonArray = new org.json.JSONArray(jsonString);
        org.json.JSONObject jsonObject;
        list = new ArrayList<Map<String, Object>>();
        for (int i = 0; i < jsonArray.length(); i++) {
            jsonObject = jsonArray.getJSONObject(i);
            list.add(getMap(jsonObject.toString()));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return list;
}

/**
 * 把json 转换为 ArrayList 形式
 *
 * @return
 */
public static List<Map<String, Object>> getListMap(String jsonString) {
    List<Map<String, Object>> list = null;
    try {

        org.json.JSONArray jsonArray = new org.json.JSONArray(jsonString);
        String jsonObject;
        list = new ArrayList<Map<String, Object>>();
        for (int i = 0; i < jsonArray.length(); i++) {
            jsonObject = jsonArray.getString(i);
            list.add(getMap(jsonObject.toString()));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return list;
}

/**
 * 把json 转换为 ArrayList 形式
 *
 * @return
 */
public static List<String> getListString(String jsonString) {
    List<String> list = null;
    try {
        org.json.JSONArray jsonArray = new org.json.JSONArray(jsonString);
        String jsonObject;
        list = new ArrayList<String>();
        for (int i = 0; i < jsonArray.length(); i++) {
            jsonObject = jsonArray.getString(i);
            list.add(jsonObject.toString());
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return list;
}

}


然后健一个实体类,我这暂时命名为 TestModel
public class TestModel implements Serializable {

public String user_id;
public String user_name;
public String phone;
public String password;
public String time;
public String gender;
public String avatar;
public String status;
public String category;
public String u_place;

}


然后就可以开始解析了:
String rsp = "你从服务器获取到的json";
TestModel testModel = JSONUtil.getData("",rsp,TestModel.class);
String msg = JSONUtil.getJSONString("msg",rsp);

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题