将SQL ResultSet转换为json

时间:2016-04-26 10:17:06

标签: sql json postgresql-9.3 postgresql-9.5

我正在使用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"}
          }
        }

任何机构都可以告诉我如何从数据库中获取我期望的结果结构。

3 个答案:

答案 0 :(得分:1)

会更简单:

A-一个普通的postgresSQL数据库和对json的转换响应。

  • A1。存储一个普通的SQL DB(并没有postgres sql json)
  • A2。检索SQL resultSet(选择查询)
  • 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

  • B1。将数据存储在mongoDB中作为json
  • B2。查询mongoDB将返回json resultset

解决方案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;