【问题标题】:Add data to ArrayList only if the key exists仅当键存在时才将数据添加到 ArrayList
【发布时间】:2019-11-23 20:44:57
【问题描述】:

我想将 JSON 数据添加到 ArrayList。 JSON 数据不一致,所有对象都没有相同的键。示例如下:

{
    "items": [
        {
            "title": "title 1",
            "option1": "option 1",
            "option2": "option 2",
            "option3": "option 3",
            "option4": "option 4"
        },
        {
            "title": "title 2",
            "option1": "option 1"
        },
        {
            "title": "title 3",
            "option1": "option 1",
            "option2": "option 2"
        }

    ]
}

问题:

我将所有键声明为空,如果它具有键值,则添加它,否则添加空值。但是我认为可以以更好的方式完成,我不应该添加具有空值的键,如果它有值则应该添加键。

这是我的代码:

List<listItem> items = new ArrayList<>();

for (int i = 0; i < items.length(); i++) {
    JSONObject item = items.getJSONObject(i);

    String titleStr, optionStr1, optionStr2, optionStr3, optionStr4;
    titleStr = optionStr1 = optionStr2 = optionStr3 = optionStr4 = null;

    if ( item.has("title") ) {
        titleStr = item.getString("title");
    }

    if ( item.has("option1") ) {
        optionStr1 = item.getString("option1");
    }

    if ( item.has("option2") ) {
        optionStr2 = item.getString("option2");
    }

    if ( item.has("option3") ) {
        optionStr3 = item.getString("option3");
    }

    if ( item.has("option4") ) {
        optionStr4 = item.getString("option4");
    }

    items.add(new listItem(
            titleStr,
            optionStr1,
            optionStr2,
            optionStr3,
            optionStr4
    ));
}

编辑:为了清楚起见,我的问题是我是否需要将 NULL 值输入到 ArrayList 中以获取不存在的键?或者我可以跳过这些键吗?

例如,第一项有 option1、option2、option3 和 option4,而第二项只有 option1,但在我的情况下,我仍然添加 option2=null、option3=null 和 option4=null。我只能为这个项目添加 option1 吗?

【问题讨论】:

    标签: java android json key


    【解决方案1】:

    只需为此编写一个方法:

    public String getIfNotNull(JSONObject item, String name){
       return item.has(name)?item.getString(name):null;
    }
    

    并运行它

    items.add(new listItem(
       getIfNotNull("title"),
       getIfNotNull("option1"),
       getIfNotNull("option2"),
       getIfNotNull("option3"),
       getIfNotNull("option4")
    ));
    

    ? 运算符是以下形式的缩写:

    if(item.has(name)){
        return item.getString(name);
    }else{
        return null;
    }
    

    如果?之前的条件是true,则返回?之后的表达式结果,否则返回:之后的表达式结果。

    顺便说一下,类名(如listItem)按照惯例应该以大写字母开头(至少在Java中)

    【讨论】:

    • 感谢您的回答。我真的是初学者,所以也许我没有正确理解。我的问题是,我真的需要为不存在的键输入空值吗? (例如对于第二个项目,它只有 option1),在这种情况下,它仍将添加 option2、option3、option4 和 null 值。是这样吗?
    • 如果listItem 的构造函数需要它们,您需要这些值,但您可以重载构造函数,而不需要每个项目。
    猜你喜欢
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 2018-09-19
    • 2016-10-19
    • 1970-01-01
    • 2021-12-03
    • 2023-03-19
    • 2016-08-04
    相关资源
    最近更新 更多