【问题标题】:Converting Map<String, Object> to json将 Map<String, Object> 转换为 json
【发布时间】:2015-01-10 18:13:03
【问题描述】:

我有一个名为 responseObj 的地图

Map<String, object> responseObj = new HashMap<String, Object>();

我已经像这样在 responseObj 中添加了一些值 -

responseObj.put("canApprove", true); //1
responseObj.put("approvers", userList);

userList 是一个列表或用户 -

List<User> userList = new ArrayList<User>();

来自 User 类的用户对象 -

class User {
 private int userId;
 private int roleId;
}

现在我有一些问题 -

  1. 是否可以将 responseObj 转换为 json,以便 "canApprove""approvers" 成为 json 的键(请参阅下面的代码片段),我该如何实现?

    {
     "canApprove" : true,
     "approver": [
    {
      "userId": 309,
      "roleId": 2009
    },
    {
      "userId": 3008,
      "roleId": 2009
    },
    

    ] }

  2. 如果我将其转换为 json 并从 jsp 获得响应,我能否在 jsp 中获得适当的布尔值,其中 "canApprove" 引用 responseObj 中的 Object

  3. 我可以将 "userId" and "roleId"User 类持久化为 JSON 吗?

【问题讨论】:

  • 你尝试了什么?至于 1 号:我不知道 gson,但我认为它可能会起作用。其他 JSON 库具有基本上是地图的 JSONObject 类和基本上是列表的 JSONArray 类,所以它不应该那么复杂。至于第 2 点:我不太明白你的问题,但由于 JSON 中的 JS 代表 JavaScript,你只需在页面上使用 JSON 结果即可。

标签: java json jsp gson


【解决方案1】:

试试这个:

public static class User
{
    public User(int userId, int roleId)
    {
        this.userId = userId;
        this.roleId = roleId;
    }
    private int userId;
    private int roleId;
    public int getUserId()
    {
        return userId;
    }
    public int getRoleId()
    {
        return roleId;
    }
    public void setUserId(int userId)
    {
        this.userId = userId;
    }
    public void setRoleId(int roleId)
    {
        this.roleId = roleId;
    }
}

测试:

Map<String, Object> responseObj = new HashMap<String, Object>();
List<User> userList = new ArrayList<User>();
userList.add(new User(1, 1));
userList.add(new User(2, 2));
responseObj.put("canApprove", true); //1
responseObj.put("approvers", userList);

System.out.println(new JSONObject(responseObj));

打印:

{"approvers":[{"userId":1,"roleId":1},{"userId":2,"roleId":2}],"canApprove":true}

(formatted)

【讨论】:

  • 你在这个例子中使用了哪个库?
  • 感谢您的回复
【解决方案2】:

您可以尝试使用 JSONObject 将地图解析为 JSON。

maven依赖是:

    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20140107</version>
    </dependency>

稍后创建一个新的 JSON 对象并传递地图

JSONObject obj = new JSONObject(responseObj);

并将对象返回给此 Web 客户端。

【讨论】:

    【解决方案3】:

    您可以使用一些 json 序列化库来为您完成这项工作,例如 fastjsongson

    1. 将依赖 jars 导入您的项目,如果您使用 maven,请在 pom.xml 中添加一个 &lt;dependency&gt; 节点,或者直接将 jar 放入项目的库文件夹中

    2.String jsonString = JSON.toJSONString(responseObj);(使用 fastjson)

    【讨论】:

      【解决方案4】:
      new com.google.gson.Gson().toJson(responseObj);
      

      【讨论】:

      • 这个方法是否满足问题3(我已经添加了问题3)。感谢您的回答
      • 是的。您会惊讶于 Gson 的效果如何。至少我是,真的很直观
      猜你喜欢
      • 1970-01-01
      • 2013-05-24
      • 2014-01-29
      • 2015-11-21
      • 1970-01-01
      • 1970-01-01
      • 2013-06-16
      • 2019-05-31
      • 1970-01-01
      相关资源
      最近更新 更多