在JAVA中 - 如何将JSON数据插入到嵌套的JSON属性中?

3

我有一段位于Java服务器上的代码:

JSONArray resultJson = new JSONArray();
try{
    ConnectToDB();
    stmt = conn.prepareStatement(query);
    m_ResultSet = stmt.executeQuery();
    resultJson = FromDBToJSON.toJSON(m_ResultSet);
    }

我得到了如下结果:
id: 1,
dest_country: "England",
fname: "Duncan",
lname: "Hurley",
address: "xyz"
},
{
id: 2,
dest_country: "England",
fname: "Duncan",
lname: "Hurley",
address: "xyz"
},
{
id: 3,
dest_country: "Israel",
fname: "Duncan",
lname: "Hurley",
address: "xyz"
},
{
id: 4,
dest_country: "USA",
fname: "Duncan",
lname: "Hurley",
address: "xyz"
},

我需要将所有用户数据(即名字、姓氏和地址)放入一个嵌套属性中,例如以下格式:
{
    id : 2,
    dest_country: "England",
    user: {
        fname: "Duncan",
        lname: "Hurley",
        address: "xyz"
    }
}

如何实现这个目标?

谢谢!

2个回答

0

你的类必须按照以下结构进行组织:

class User{
    public string fname;
    public string lname;
    public string address;
}

class ResultType{
    public int id;
    public string dest_country;
    public User user;
}

当解析为JSON时,这应该会生成您所寻找的结果。

JSON基于当前类结构,因此要将要嵌套在属性中的用户生成自包含该数据的对象属性。

另一种方式是之后重建您的JSON数据,但这不够整洁。像这样:

result.each(function(){
    this.user = { fname: this.fname, lname: this.lname, address: this.address };
});

你是在指 JavaScript 吗?我需要在服务器端完成这个。 - Gil404
第二部分是js,但类结构是指Java类。如果必须在服务器端完成,则应该设计类的结构,以便生成所需的数据结构,否则修改输出将变得费力且不易维护/重用。 - Dhunt
好的,但如果这样做,那么我仍然需要将ResultSet中的所有列映射到每个属性。还是有一种“自动”的方法可以做到这一点吗? - Gil404
如果类的结构如所示,则默认情况下应输出您要查找的结构,并且不需要使用js或其他任何内容进行进一步更改。 - Dhunt
@Dhunt,我该如何使用Spring和Hibernate保存此对象?我得到了嵌套的JSON。 - Hema

0
使用 javax.json.JsonObject,请尝试以下代码:
JSONArray resultJson = new JSONArray();
try{
ConnectToDB();
stmt = conn.prepareStatement(query);
m_ResultSet = stmt.executeQuery();
while (m_ResultSet.next()) {
  JsonObject userObject= Json.createObjectBuilder()
    .add("fname", m_ResultSet.getString("fname")
    .add("lname", m_ResultSet.getString("lname")
    .add("adress", m_ResultSet.getString("adress").build();

 JsonObject resultJson = Json.createObjectBuilder()
  .add("id", m_ResultSet.getInt("id"))
  .add("dest_country", m_ResultSet.getString("dest_country"))
  .add("user", userObject).build();
}

应该可以了。


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