如何使用多个值

时间:2018-05-10 09:04:18

标签: java arrays json struts

我确实使用strust-json库自动将java object转换为json。任务是从服务器向客户端提供以下输出:

{
"results": 
{
  "id": 1,
  "text": "Option 1"
},
{
  "id": 2,
  "text": "Option 2"
}
} 

我已经使用数组属性创建了对象:

public class ResultsOrganisationUnit {

private Integer[] id = new Integer[100];
private String[] text = new String[100];
public Integer[] getId() {
    return id;
}
public void setId(Integer[] id) {
    this.id = id;
}
public String[] getText() {
    return text;
}
public void setText(String[] text) {
    this.text = text;
}           

}

初始化:

results = new ResultsOrganisationUnit();

然后我尝试使用for-each周期填写它:

for (OrganisationUnitNameHistory children : children2){
            results.setId(new Integer[] {children.getOrganisationunitCode()});
            results.setText(new String[] {children.getName()});

        }

问题是,我只从客户端的输出中获取数组的最后一个值。

{"results":{"id":[3509],"text":["text 1"]}}

但是,对象children例如具有全部5个值。看起来我每次都要覆盖相同的数组值,而不是填写新的数组值。我很困惑我正在制作的逻辑错误在哪里。这一定很简单......

2 个答案:

答案 0 :(得分:1)

您应该将id和text包装到新类中,并将它们的集合存储在result:

public class OrganisationUnit {
    private Integer id;
    private String text;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

}

public class Results {

    private List<OrganisationUnit> results = new ArrayList<>();

    public List<OrganisationUnit> getResults() {
        return results;
    }

    public void setResults(List<OrganisationUnit> results) {
        this.results = results;
    }
}

使用循环填充:

    Results results = new Results();

    for (OrganisationUnitNameHistory children : children2) {
        OrganisationUnit ou = new OrganisationUnit();
        ou.setId(children.getOrganisationunitCode());
        ou.setText(children.getName());
        results.getResults().add(ou);
    }

或直接不使用Result类:

List<OrganisationUnit> results = new ArrayList<>();

for (OrganisationUnitNameHistory children : children2) {
        OrganisationUnit ou = new OrganisationUnit();
        ou.setId(children.getOrganisationunitCode());
        ou.setText(children.getName());
        results.add(ou);
}

答案 1 :(得分:0)

您正在获取最后一个值,因为这是您要求代码执行的操作。 我不确定children2是什么类型的变量,但是让我们说它是List<ResultsOrganisationUnit>然后一个解决方案是:

private Integer[] ids = new Integer[100];
private String[] texts = new String[100];

for ( int i=0; i < children2.size(); i++) {
    ids[i] = children2[i].getOrganisationunitCode();
    texts[i] = children2[i].getName();
}

results.setId(ids);
results.setText(texts);

但是,您所指的任务仍然不是由您的代码完成的。 您将看到的内容类似于以下内容,具体取决于您提供的值:

{
    "results":
        {
            "id":[1, 2, 3],
            "text":["text 1", "text 2", "text 3"]
        }
}

为了能够在评论中获得您要求的内容,请创建您的OrganisationUnit,如下所示:

public class OrganisationUnit{
   private Integer id;
   private String text;
   public Integer getId(){return id;}
   public void setId(Integer id){this.id = id;}
   public String getText(){return text;}
   public void setText(String text){this.text = text;}
}

然后将结果的值存储在List<OrganisationUnit>

List<OrganisationUnit> results = new ArrayList();
for (OrganisationUnitNameHistory child : children2) {
    OrganisationUnit tempChild = new OrganisationUnit();
    tempChild.setId(child.getOrganisationunitCode());
    tempChild.setText(child.getName());
    results.add(tempChild);
}

您返回的结果应该与您在评论字段中查找的内容相符。