我正在使用postgresql进行我的webapplication。我是这个Postgresql-json的新手。我只想以json结构的形式获取select查询结果。 以下是我的详细信息:
create table sample(id serial, info jsonb);
insert into sample("info") values('{"person": {"phone": 9804484234,"name":{"firstname":"Alice", "lastname":"bob"}, "empId": "E067", "age":25}');
选择查询:
select "info"->'person'->>'lastname' from sample;
结果:鲍勃
但是我希望得到上面的结果和json节点,如下所示:
result: {"person":
{"name":
{"lastname":"bob"}
}
}
任何机构都可以告诉我如何从数据库中获取我期望的结果结构。
答案 0 :(得分:1)
会更简单:
A-一个普通的postgresSQL数据库和对json的转换响应。
A3。使用此代码将结果集转换为json
public class SOF_36861985 {
public static JSONArray toJson(ResultSet res) throws Exception {
JSONArray array = new JSONArray();
while (res.next()) {
int size = res.getMetaData().getColumnCount();
JSONObject obj = new JSONObject();
for (int i = 0; i < size; i++) {
obj.put( res
.getMetaData()
.getColumnLabel(i + 1)
.toLowerCase(),
res.getObject(i + 1));
array.put(obj);
}
}
return array;
}
}
或强>
<强> B中。使用json本机数据库的mongoDB
解决方案A与解决方案B的比较
解决方案A:sql +不会强迫你拥有一个新的数据库,你将继续使用postgressql - 将从ResultSet转换为Json - 将在SQL数据库中具有静态模式(在nosql中没有动态模式)
解决方案B:mongo - 更改数据库,这取决于生产......并对基础设施产生影响.... +是json原生数据库 +可能是一个新的DB,你将有一个学习时间来掌握它 (将需要更多时间来设置,安装,开发......)
答案 1 :(得分:1)
如果路径已修复,您可以将您关注的路径重现为字符串常量。
select '{"person":{"name":{"lastname":"' ||
(info->'person'->'name'->>'lastname') ||
'"}}}'as val from sample;
答案 2 :(得分:0)
SELECT json_build_object("person",
json_build_object("name",
json_build_object("lastname",
(info->'person'->'name'->>'lastname'))))
AS val FROM sample;