[英]How to return a list of multiple JSON items in java
我试图弄清楚如何返回多个 JSON 项目。 现在我可以像这样返回一个 JSON :
{
"result": {
"userId": "abcde123",
"telephoneNumber": "1-555-5555555"
},
"error": null
}
但我想返回多个 JSON 项目,如下所示:
{
"result": {{
"userId": "abcde123",
"telephoneNumber": "1-555-5555555"
}
{
"userId": "fghi456",
"telephoneNumber": "1-333-3333333"
}
},
"error": null
}
我可以将多个 JSON 项目作为字符串查看,如下所示,但我想将其作为多个 JSON 项目返回,但我不知道如何:
[LDAPModel(userId=abcde123, telephoneNumber=1-555-5555555), LDAPModel(userId=fghi456, telephoneNumber=1-333-3333333]
我是 Java 的完整初学者,我对 Java 的语法或了解不多。 但是我从 SpringBoot 获得了这些代码(包括下面的代码); 我真的不明白它在做什么,所以我不知道如何创建一个 output 列表。
目前,这是给我的:
public Optional<LDAPModel> getDirectReports(String cdsID) {
LdapQuery ldapQuery = LdapQueryBuilder.query()
.searchScope(SearchScope.SUBTREE)
.where("objectclass").is("person")
.and("managerID").like(cdsID);
List<LDAPModel> ldapModelList = ldapTemplate.search(ldapQuery, (Attributes attrs) ->
LDAPModel.builder()
.userId(getValue(attrs, "userid"))
.telephoneNumber(getValue(attrs, "phoneNumber"))
.build());
// for (int ii = 0; ii < ldapModelList.size(); ii++) {
// Optional.of(ldapModelList.get(ii));
// ldapModelList.isEmpty() ? Optional.empty() : Optional.of(ldapModelList.get(ii));
// }
return ldapModelList.isEmpty() ? Optional.empty() : Optional.of(ldapModelList.get(0));
}
我试着把它放在一个循环中(就像上面注释掉的代码一样),但我不知道如何创建一个列表。 我尝试删除 get(0),但出现语法错误...我尝试了很多东西,但它没有帮助。
任何人都可以帮忙吗?
更新/编辑:谢谢大家的回答。 我在这里发布了一个后续问题。 如果你有机会,请帮助我。 谢谢。
这个结构对我来说看起来很奇怪。 你所拥有的看起来像你希望结果是一个对象数组:
{
"result": [
{ "userId": "abcde123",
"telephoneNumber": "1-555-5555555" }
{ "userId": "fghi456",
"telephoneNumber": "1-333-3333333" }
],
"error": null
}
Given a reasonable JSON library, then the value of the "result" member of the JSON object is a JSON array, from which you can then pick out each element in turn by indexing, and each element is a JSON object with 2 members.
首先,我想指出您的 JSON 格式不正确。 当您想在 JSON 中表示多个对象时,您应该使用方括号并用逗号分隔每个 object:
{
"result": [
{
"userId": "abcde123",
"telephoneNumber": "1-555-5555555"
},
{
"userId": "fghi456",
"telephoneNumber": "1-333-3333333"
}
],
"error": null
}
当您尝试删除 get(0) 时,您的 Java 代码不起作用的原因是方法public Optional<LDAPModel> getDirectReports(String cdsID)
返回一个Optional<LDAPModel>
类型,并且通过删除 get(0) 您正在有效地尝试返回一个Optional<List<LDAPModel>>
。 如果您希望该方法返回一个列表而不是单个 object,您可以将返回类型更改为Optional<List<LDAPModel>>
,然后安全地删除 get(0)。
public Optional<List<LDAPModel>> getDirectReports(String cdsID) {
LdapQuery ldapQuery = LdapQueryBuilder.query()
.searchScope(SearchScope.SUBTREE)
.where("objectclass").is("person")
.and("managerID").like(cdsID);
List<LDAPModel> ldapModelList = ldapTemplate.search(ldapQuery, (Attributes attrs) ->
LDAPModel.builder()
.userId(getValue(attrs, "userid"))
.telephoneNumber(getValue(attrs, "phoneNumber"))
.build());
return ldapModelList.isEmpty() ? Optional.empty() : Optional.of(ldapModelList);
}
我假设您已经设法获取 LDAPModel 的所有列表/数组,即 List ldapModelList
如果是这样,您只需在 getDirectReports 方法中返回此 ldapModelList。
public List<LDAPModel> getDirectReports(String cdsID) {
LdapQuery ldapQuery = LdapQueryBuilder.query()
.searchScope(SearchScope.SUBTREE)
.where("objectclass").is("person")
.and("managerID").like(cdsID);
List<LDAPModel> ldapModelList = ldapTemplate.search(ldapQuery, (Attributes attrs) ->
LDAPModel.builder()
.userId(getValue(attrs, "userid"))
.telephoneNumber(getValue(attrs, "phoneNumber"))
.build());
return ldapModelList;
}
然后只需使用您的库返回 json 数组。 我想你使用 jackson。 只要确保在 LDAPModel 你有
LDAP型号class如下:
public class LDAPModel {
String userId;
String telephoneNumber;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getTelephoneNumber() {
return telephoneNumber;
}
public void setTelephoneNumber(String telephoneNumber) {
this.telephoneNumber = telephoneNumber;
}
}
对于使用 Jackson 的 object 到 JSON 字符串转换,我假设您已经知道或者可以找到方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.