如何在android中过滤Json中的数据?

如何在android中过滤Json中的数据?,android,json,Android,Json,我以json格式获取数据,如 {"Users":[ {"category_id":"1","user_email":"a@a.com"}, {"category_id":"5","user_email":"a@b.com"}, {"category_id":"1","user_email":"a@c.com"}, {"category_id":"5","user_email":"a@d.com"}, {"category_id":"3","user_email":"a@d.com"}]} 现在

我以json格式获取数据,如

{"Users":[
{"category_id":"1","user_email":"a@a.com"},
{"category_id":"5","user_email":"a@b.com"},
{"category_id":"1","user_email":"a@c.com"},
{"category_id":"5","user_email":"a@d.com"},
{"category_id":"3","user_email":"a@d.com"}]}
现在我的问题是,是否可以在android根据category_id过滤此json?例如,如果我从微调器中选择1,则应返回包含category_id=1示例内容的数据

{"Users":[{"category_id":"1","user_email":"a@a.com"},
{"category_id":"1","user_email":"a@c.com"}]}
如果选择3,则应返回内容为category_id=3的用户

{"Users":[
{"category_id":"3","user_email":"a@d.com"}]}
我只是想知道安卓系统中是否有可用的方法,以便我可以轻松地过滤
数据。

使用Android SDK中的JSONObject。请在此处查看文档:

您基本上需要解析JSON,然后循环并仅对具有指定类别id的项进行操作

对于较大的数据集,如果编写正确,使用JsonReader将更高效


首先,您需要在活动中创建变量

//URL to get JSON
private static String url = "your url to parse data";

//JSON Node Names
private static final String TAG_USERS = "users";
private static final String TAG_CATEGORY_ID = "category_id";
private static final String TAG_USER_EMAIL = "user_email";

// Data JSONArray
JSONArray users = null;

//HashMap to keep your data
ArrayList<HashMap<String, String>> userList;

最后我得到了答案

private void applySearch(String searchStr) {
            ArrayList<User> searchEmail = new ArrayList<User>();


            for (int i = 0; i < UserArray.size(); i++) {
                if(UserArray.get(i).getcategory_id().toLowerCase().contains(searchStr.toLowerCase())) {
                    searchEmail.add(UserArray.get(i));
                }
            }

           // set the adapter hear 

        }
private void applySearch(String searchStr){
ArrayList searchEmail=新建ArrayList();
对于(int i=0;i
如果没有循环的则不可能。。。
UserArray是我的数组列表内容用户对象

hi@Sowellie我知道可以通过在ArrayList中设置所有对象,然后设置为循环来过滤数据,但是是否有其他方法可以快速执行,因为我的数据内容超过5000个用户数据(如果有其他方法或任何第三方库存在)提供快速执行并给出结果。。。谢谢。如果您要处理5000行,则需要在服务器端筛选数据。在客户端解析那么多JSON不是一个好主意。如果无法进行服务器端筛选,那么使用JsonReader应该比使用JSONObject更快。对于用户数组中的每个循环,当yourLoop.category_id==3时,您需要做任何您想做的事情,然后退出循环。我正在尝试避免在筛选时出现循环,因为大约有5000个用户数据,并在列表中设置用户,当选择微调器值时,必须设置快速新数据,因此是否可以在中使用谓词安卓
//Create service handler class instance
ServiceHandler sh = new ServiceHandler();

//Url request and response
String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);
Log.d("Response: ", "> " + jsonStr);

if(jsonStr != null) {
    try {
        JSONObject jsonObj = new JSONObject(jsonStr);

        //Get Json Array Node
        users = jsonObj.getJSONArray(TAG_USERS);

        // Looping through all data
        for(int i = 0; i < users.length(); i++) {
            JSONObject u = users.getJSONObject(i);

            String category_id = u.getString(TAG_CATEGORY_ID);
            String user_email = u.getString(TAG_USER_EMAIL);

            // Temporary HashMap for single data
            HashMap<String, String> user = new HashMap<String, String>();

            // Adding each child node to Hashmap key -> value
            user.put(TAG_CATEGORY_ID, category_id);
            user.put(TAG_USER_EMAIL, user_email);

            //Adding user to userList
            userList.add(user);
        }
    }catch (JSONException e) {
        e.printStackTrace();
    }
} else {
    Log.e("ServiceHandler", "Couldn't get any data from url");
}
// i being the counter of your loop
String catId = userList.get(i).get("category_id");
if(catId == 3) {
    ... your code
}
private void applySearch(String searchStr) {
            ArrayList<User> searchEmail = new ArrayList<User>();


            for (int i = 0; i < UserArray.size(); i++) {
                if(UserArray.get(i).getcategory_id().toLowerCase().contains(searchStr.toLowerCase())) {
                    searchEmail.add(UserArray.get(i));
                }
            }

           // set the adapter hear 

        }