繁体   English   中英

如何在 java 中返回多个 JSON 项目的列表

[英]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 你有

  1. getter 和 setter
  2. 如果您添加自己的具有参数的构造函数,则为空构造函数。 但是如果您不添加任何构造函数,则无需添加此默认的空构造函数,因为 java 会自动为您创建它。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM