【问题标题】:Convert object that contains another object to json将包含另一个对象的对象转换为 json
【发布时间】:2012-06-06 20:49:49
【问题描述】:

我需要使用JSON 将数据从HTML 传递到Service(在JS/JQUERY 中)

在服务中,我有一个服务调用接收一个包含另一个对象和另外 2 个字段的对象。

角色对象:

import java.io.Serializable;

public class Role implements Serializable {           
    private long id;
    private String name;    
}

用户对象:

import java.io.Serializable;

public class User implements Serializable {           
    private String userName;
    private String password;    
    private ArrayList<Role> roles;
}

到目前为止,我设法将数据传递给JSON,就像其他服务一样:(数据只包含 2 个参数:id 和 userName)

xmlHttp.open("POST", "http://www.foo.com/serviceFunction2", true);
xmlHttp.send('{"Id": "123", "userName": "test"}');

那么,我的问题是如何使用JS/JQUERY 填充包含Role 对象的User 对象?就像我设法用这条线发送它:

xmlHttp.send('{"Id": "123", "userName": "test"}');

谢谢

【问题讨论】:

  • 使用 JSON 库,如 JAXB、GSON、Jackson 等
  • @Matt Ball - 我需要在HTML 代码中转换它...
  • 什么?你的问题没有意义。我假设您的意思是“JavaScript”,而不是“HTML”。您需要转换的“它”是什么?
  • @Matt Ball - 我的意思是在HTML 代码中我需要使用“JS/JQUERY”传递 user 对象。就像我设法通过 xmlHttp.send('{"Id": "123", "userName": "test"}');现在我需要传递一个包含对象的对象...
  • 如果您使用 jQuery(如标记),为什么要编写自己的 xmlHttp 内容?只需使用$.ajax()...

标签: java javascript json


【解决方案1】:

有几种方法可以在 JS 中“嵌套”对象,但为了您的目的,最简单的方法可能是嵌套您的对象和/或数组字面量。如果“角色”应该是一个数组,那么类似这样:

'{"userName":"test", "password":"secret", "roles":["role1","role2","role3"]}'

如果数组中的每个角色本身都是一个具有属性的对象:

{
   "userName":"test",
   "password":"secret",
   "roles": [
       { "roleName":"role1", "prop2":"someValue", "prop3":"whatever" },
       { "roleName":"role2", "prop2":"someValue", "prop3":"whatever" },
       { "roleName":"role3", "prop2":"someValue", "prop3":"whatever" }
   ]
}

(为了可读性添加了换行符,但如果创建字符串,您会删除它们。)

【讨论】:

  • 我会试一试...谢谢
【解决方案2】:

我不知道您的目标是什么,但如果您使用 HTML 页面作为 GUI 和 Java 进行处理,您不妨使用 或类似的。有多个框架,例如 ,可以为您处理很多事情。

如果您有兴趣,请查看Primefaces showcase

正如 MattBall 建议的那样,您也可以使用 之类的东西,这可以减轻您的负担。

你可以使用很多强大而简单的东西。

您可以使用注释将对象映射到 JSON/XML:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Role
{
    @XmlAttribute
    private long id;
    @XmlAttribute
    private String name;    
}

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class User
{
    @XmlAttribute
    private String userName;
    @XmlAttribute
    private String password;
    @XmlElement    
    private ArrayList<Role> roles;
}

然后您可以在 Web 服务中使用它:

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("user/{username}")
public User getUser( @PathParam("username") String userName)
{
    User user;
    // Get your user
    return user;
}

【讨论】:

    猜你喜欢
    • 2016-12-06
    • 2015-03-13
    • 1970-01-01
    • 2021-10-30
    • 2015-09-01
    • 2021-08-14
    • 1970-01-01
    • 2017-10-15
    • 2022-10-14
    相关资源
    最近更新 更多