如何在JSON中搜索并在活动中返回搜索结果



我正在分析活动中的JSON,以在gridView中显示文本和图像。但是,我想尝试在此JSON上添加搜索功能,并在活动中显示结果。

例如,考虑在线服务器上的JSON脚本,如下所示:

[
    {
        "title": "Ongata Rongai",
        "image": "http://snapt.t15.org/melanie/real_estates/images/house1.jpg",
        "rating": 5 500 000,
        "releaseYear": 2014,
        "genre": ["Spacious open lounge and kitchen"]
    },
	{
        "title": "Kisumu",
        "image": "http://snapt.t15.org/melanie/real_estates/images/house2.jpg",
        "rating": 1 700 000,
        "releaseYear": 2014,
        "genre": ["high end townhouse."]
    },
	{
        "title": "Mombasa",
        "image": "http://snapt.t15.org/melanie/real_estates/images/house3.jpg",
        "rating": 68 000,
        "releaseYear": 2014,
        "genre": ["Its fully fitted kitchedn pantry with a beautyful backyard."]
    }
  ]

我想像Kisumu那样实现标题的搜索,并且要显示的结果将仅来自这一部分,因此我可以单独解析它:

[
	{
        "title": "Kisumu",
        "image": "http://snapt.t15.org/melanie/real_estates/images/house2.jpg",
        "rating": 1 700 000,
        "releaseYear": 2014,
        "genre": ["high end townhouse."]
    }
  ]

有没有实现上述目标的方法?

我对想法和建议持开放态度,任何帮助都将不胜感激。

您不能直接搜索json。将json转换为List Java类。然后使用像Predicate这样的Java API来找到满足您的条件的必要Java类。对于,例如:标题为Kusumu,正如您所要求的。

这将把类的列表限制为满足条件的类。如果需要json,那么将java类转换回json。

注意:您可以使用GSON进行简单的class <-> json转换

更新

用于将Json转换为Java类

List<ModelClass> models = new Gson().fromJson(yourJsonString, ModelClass.java);

然后使用谓词

public static Predicate<ModelClass> isHavingTitle() {
    return p -> p.getTitle().contains("Kusumu");
}

在Java8中,谓词过滤可以像下面这样完成,在其他情况下,你只需谷歌即可

public static List<ModelClass> filterEmployees (List< ModelClass > models, Predicate< ModelClass > predicate) {
    return models.stream().filter( predicate ).collect(Collectors.<ModelClass>toList());
}

我没有编译这些:)

String filteredJson = new Gson().toJson(models);

此方法根据需要提供服务器和标题的resalt,并将搜索结果返回为JSONObject

private JSONObject SearchMethod(String result,String Key)
{
//result is your server response 
//Key is Kisumu 
JSONArray json = new JSONArray(result);
    for(int i=0;i<json.length();i++){                        
        JSONObject e = json.getJSONObject(i);
        if(e.c.getString("title").contains(Key))
            return e ;     
        }
    return null;
}

最新更新