Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 仅当密钥存在时才将数据添加到ArrayList_Java_Android_Json_Key - Fatal编程技术网

Java 仅当密钥存在时才将数据添加到ArrayList

Java 仅当密钥存在时才将数据添加到ArrayList,java,android,json,key,Java,Android,Json,Key,我想将JSON数据添加到ArrayList。JSON数据不一致,所有对象没有相同的键。下面是一个例子: { "items": [ { "title": "title 1", "option1": "option 1", "option2": "option 2", "option3": "option 3", "option4": "option 4"

我想将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,如果它有键值,则添加它,否则添加null值。然而,我认为这可以更好地完成,我不应该添加具有空值的键,应该添加具有值的键

这是我的代码:

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
    ));
}
List items=new ArrayList();
对于(int i=0;i
编辑:为了清楚起见,我的问题是,对于不存在的键,是否需要在ArrayList中输入空值?或者我可以跳过这些键吗


例如,第一个项目有option1、option2、option3和option4,而第二个项目只有option1,但在我的情况下,我仍然添加option2=null、option3=null和option4=null。我只能为此项添加选项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以及空值。这就是方法吗?如果
listItem
的构造函数需要这些值,您需要这些值,但您可以重载构造函数,使其无法满足所有项的需要。