Java json对象数据更改,有时没有值

Java json对象数据更改,有时没有值,java,android,json,api,Java,Android,Json,Api,我正在搜索项目数据库。当我在android应用程序中搜索并返回json时,如果某个项目没有其中一个对象的值,它就会中断 例如,如果我为某个项目返回了此数据: 名字 身份证件 伊布 ABV 并不是每个项都有一个数据点的值,所以如果一个项缺少IBU,它的json中就没有该数据点,我的代码就停止了。当我搜索一个没有ibu的项目时,我的一个查询中断。所以我试着在它旁边放一个try,让它忽略它,如果它没有得到任何东西。它还是停了下来 String beerId = "";

我正在搜索项目数据库。当我在android应用程序中搜索并返回json时,如果某个项目没有其中一个对象的值,它就会中断

例如,如果我为某个项目返回了此数据:

名字 身份证件 伊布 ABV

并不是每个项都有一个数据点的值,所以如果一个项缺少IBU,它的json中就没有该数据点,我的代码就停止了。当我搜索一个没有ibu的项目时,我的一个查询中断。所以我试着在它旁边放一个try,让它忽略它,如果它没有得到任何东西。它还是停了下来

String beerId = "";
                    String beerName = "";
                    String beerDescription = "";;
                    String beerAbv = "";
                    String beerIbu = "";

                    //json.getJSONArray("data").length()

                    //get json items
                    for(int i = 0; i < 1; i++) {

                        try{
                            beerId = json.getJSONArray("data").getJSONObject(i).getString("id");
                        }
                        finally{}

                        beerName = json.getJSONArray("data").getJSONObject(i).getString("name");
                        beerDescription = json.getJSONArray("data").getJSONObject(i).getString("description");
                        beerAbv = json.getJSONArray("data").getJSONObject(i).getString("abv");
                        try{
                            beerIbu = json.getJSONArray("data").getJSONObject(i).getString("ibu");
                        }
                        finally{beerIbu = "";}
String beerId=“”;
字符串beerName=“”;
字符串beerDescription=“”;;
字符串beerAbv=“”;
字符串beerIbu=“”;
//json.getJSONArray(“数据”).length()
//获取json项
对于(int i=0;i<1;i++){
试一试{
beerId=json.getJSONArray(“数据”).getJSONObject(i).getString(“id”);
}
最后{}
beerName=json.getJSONArray(“数据”).getJSONObject(i).getString(“名称”);
beerDescription=json.getJSONArray(“数据”).getJSONObject(i).getString(“说明”);
beerAbv=json.getJSONArray(“数据”).getJSONObject(i).getString(“abv”);
试一试{
beerIbu=json.getJSONArray(“数据”).getJSONObject(i).getString(“ibu”);
}
最后{beerIbu=”“;}

解决此问题的一个好方法是创建一个方法(void),该方法完成所有工作,然后返回您要查找的答案。我正在制作一个YouTube视频,以帮助更好地解释,但代码如下:

 String beerId = GetBeerDataFromJSON(0,"id");
 String beerName = GetBeerDataFromJSON(0,"name");
 String beerDescription = GetBeerDataFromJSON(0,"description");
 String beerAbv = GetBeerDataFromJSON(0,"abv");
 String beerIbu = GetBeerDataFromJSON(0,"ibu");
然后在该void之外(但在同一类中)创建return方法

 private String GetBeerDataFromJSON(int position, String whatToGet) {
    String whatIsTheKeyYouAreLookFor = whatToGet;
    int whereInTheJSONArrayForLoopIsTheData = position;

    String holder = "";


    try{
        holder = json.getJSONArray("data").getJSONObject(whereInTheJSONArrayForLoopIsTheData).getString(whatIsTheKeyYouAreLookFor);

    } catch (JSONException e) {
        holder = "";
    }



    return holder;
}

有一种更有效的方法来编写此代码。在我的视频中,我将详细解释。但这将暂时起作用。

尝试{beerIbu=xxx;}最后{beerIbu=”“;}
@fge那么我应该把finally拿出来吗?它说我必须拥有它。而且如果我把finally留为空,它仍然不起作用。如果它们不存在,那么获取它们并尝试使用它们而不检查是否返回了任何东西是不会起作用的。不要这样做。我喜欢无缘无故地被否决。。。。