我在mu Postgresql 9.05上有这些表:
表:核心
字段:名称,描述,数据
数据字段是一个json字段,带有(例如):{“id”:“100”,“tax”:“4,5”}
每个数据始终是一个json.
我的问题是:我可以将所有JSON字段作为查询字段吗?像这样返回:名称,身份证,税….
问题是:我的JSON确实有各种字段,可以是Id,税或其他.
你不能“动态地”做到这一点.您需要指定要拥有的列:
select name,description,id,data ->> 'tax' as tax,data ->> 'other_attribute' as other_attribute from core;
如果你做了很多,你可能想把它放到一个视图中.
另一种选择是在Postgres中创建一个表示JSON中属性的对象类型,例如:
create type core_type as (id integer,tax numeric,price numeric,code varchar);
然后,您可以将JSON强制转换为该类型,并且JSON中的相应属性将自动转换为列:
使用上面的类型和以下JSON:{“id”:“100”,“tax”:“4.5”,“price”:“10”,“code”:“YXCV”}你可以这样做:
select id,(json_populate_record(null::core_object,data)).* from core;
它将返回:
id | tax | price | code ---+------+-------+----- 1 | 4.50 | 10 | YXCV
但是您需要确保每个JSON值都可以转换为相应对象字段的类型.