将包含另一个对象的对象转换为json

时间:2012-06-06 20:49:49

标签: java javascript json

我需要使用HTMLService}

将数据从JSON传递到JS/JQUERY

在服务中,我有一个服务调用,它返回一个包含另一个对象和另外两个字段的对象。

角色对象:

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填充包含角色对象的用户对象?就像我设法用这条线发送它:

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

由于

2 个答案:

答案 0 :(得分:1)

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

'{"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" }
   ]
}

(为了便于阅读,添加了换行符,但如果创建字符串,则会将其删除。)

答案 1 :(得分:0)

我不知道你的目标是什么,但如果你使用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;
}