将Map<String, Object>转换为json

3
我有一个名为responseObj的地图。
Map<String, object> responseObj = new HashMap<String, Object>();

我已经在responseObj中添加了一些值,如下所示 -
responseObj.put("canApprove", true); //1
responseObj.put("approvers", userList);
< p > < code > userList 是一个用户列表 -

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

用户类中的用户对象 -
class User {
 private int userId;
 private int roleId;
}

现在我有一些问题 -
  1. Is it possible to convert the responseObj to a json so that "canApprove" and "approvers" become key of json (see the code snippent below) and how can I make it?

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

    ] }

  2. If I convert it into a json and get the response from jsp can I able get the appropriate boolean in jsp where the "canApprove" refers an Object in the responseObj?

  3. Can I persist the "userId" and "roleId" to JSON from User Class?


你尝试了什么?至于第一点:我不知道gson,但我认为它可能有效。其他JSON库有JSONObject类,基本上是映射,和JSONArray类,基本上是列表,所以应该不会那么复杂。至于第二点:我不太明白你的问题,但由于JSON中的JS代表JavaScript,你只需在页面上使用JSON结果即可。 - Thomas
4个回答

5
尝试这个:

试试看:

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)


1
你在这个例子中使用的是哪个库? - Razib
1
请提及您正在使用的JSONObject库。 - Fakipo

3
你可以尝试使用JSONObject将map解析为JSON。
maven依赖项如下:
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20140107</version>
    </dependency>

稍后创建一个新的 JSON 对象,并传递该映射。
JSONObject obj = new JSONObject(responseObj);

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

1
new com.google.gson.Gson().toJson(responseObj);

这个方法是否满足问题3的要求(我后来添加了问题3)?感谢您的回答。 - Razib
是的。你会惊讶于Gson的工作效果有多好。至少我是这样认为的,它真的很直观。 - Attila Neparáczki

0
您可以使用一些JSON序列化库来完成此工作,例如fastjsongson 1.将依赖项jar导入您的项目中,如果您正在使用Maven,请在pom.xml中添加一个<dependency>节点;否则,只需将该jar文件放入您的项目库文件夹中
2.String jsonString = JSON.toJSONString(responseObj);(使用 fastjson )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接