我确实使用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个值。看起来我每次都要覆盖相同的数组值,而不是填写新的数组值。我很困惑我正在制作的逻辑错误在哪里。这一定很简单......
答案 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);
}
您返回的结果应该与您在评论字段中查找的内容相符。