【问题标题】:sort the json array in postgresql在 postgresql 中对 json 数组进行排序
【发布时间】:2021-09-10 16:26:50
【问题描述】:
create table sort(authorized json);
insert into sort values('{"name":"Authorized","states":[{"state_code":"CT","state_name":"Connecticut","is_checked":false},{"state_code":"NJ","state_name":"New Jersey","is_checked":false},{"state_code":"SC","state_name":"South Carolina","is_checked":false},{"state_code":"FL","state_name":"Florida","is_checked":false},{"state_code":"MT","state_name":"Montana","is_checked":false},{"state_code":"GA","state_name":"Georgia","is_checked":false},
{"state_code":"IA","state_name":"Iowa","is_checked":false},{"state_code":"AR","state_name":"Arkansas","is_checked":false},{"state_code":"UT","state_name":"Utah","is_checked":false},{"state_code":"ID","state_name":"Idaho","is_checked":false},{"state_code":"IL","state_name":"Illinois","is_checked":false},{"state_code":"IN","state_name":"Indiana","is_checked":false},{"state_code":"MA","state_name":"Massachusetts","is_checked":false},{"state_code":"MI","state_name":"Michigan","is_checked":false},{"state_code":"MS","state_name":"Mississippi","is_checked":false},{"state_code":"NM","state_name":"New Mexico","is_checked":false},{"state_code":"NV","state_name":"Nevada","is_checked":false},{"state_code":"RI","state_name":"Rhode Island","is_checked":false},{"state_code":"SD","state_name":"South Dakota","is_checked":false},{"state_code":"UT","state_name":"Utah","is_checked":false},{"state_code":"WV","state_name":"West Virginia","is_checked":false},{"state_code":"SD","state_name":"South Dakota","is_checked":false},
{"state_code":"WV","state_name":"West Virginia","is_checked":false}]}')
 

我希望这个 json 在更新后按照state_code 排序

{"name":"Authorized","states":[{"state_code":"AR","state_name":"Arkansas","is_checked":false},{"state_code":"CT","state_name":"Connecticut","is_checked":false},{"state_code":"FL","state_name":"Florida","is_checked":false},{"state_code":"GA","state_name":"Georgia","is_checked":false},
{"state_code":"IA","state_name":"Iowa","is_checked":false},{"state_code":"ID","state_name":"Idaho","is_checked":false},{"state_code":"IL","state_name":"Illinois","is_checked":false},{"state_code":"IN","state_name":"Indiana","is_checked":false},{"state_code":"MA","state_name":"Massachusetts","is_checked":false},{"state_code":"MI","state_name":"Michigan","is_checked":false},{"state_code":"MS","state_name":"Mississippi","is_checked":false},{"state_code":"MT","state_name":"Montana","is_checked":false},{"state_code":"NJ","state_name":"New Jersey","is_checked":false},{"state_code":"NM","state_name":"New Mexico","is_checked":false},{"state_code":"NV","state_name":"Nevada","is_checked":false},{"state_code":"RI","state_name":"Rhode Island","is_checked":false},{"state_code":"SC","state_name":"South Carolina","is_checked":false},{"state_code":"SD","state_name":"South Dakota","is_checked":false},{"state_code":"UT","state_name":"Utah","is_checked":false},{"state_code":"WV","state_name":"West Virginia","is_checked":false},{"state_code":"SD","state_name":"South Dakota","is_checked":false},{"state_code":"UT","state_name":"Utah","is_checked":false},
{"state_code":"WV","state_name":"West Virginia","is_checked":false}]}

【问题讨论】:

    标签: json postgresql sorting


    【解决方案1】:

    试试这个:

    select substr(column_name, position ('state_code":"' in column_name)+13,4) as stateCode
    from table_name
    order by stateCode asc/desc
    

    注意:值13代表字段长度(state_code":),4代表字段值("AR")

    可能需要根据您的表格和列进行一些调整。选择部分将选择您想要的元素,然后您只需按 asc 或 desc 对其进行排序。

    【讨论】:

      【解决方案2】:

      您可以在通过子查询中的排序检索数据时获得排序的结果,同时将相关数组(states)提取为单独的列,然后在坚持name元素的同时聚合数组的各个对象对象如

      SELECT JSON_AGG(
                      JSON_BUILD_OBJECT( 'name', name, 'states', states)
                     ) AS authorized 
        FROM
        (
         SELECT authorized->'name' AS name, j.states
           FROM sort,
                JSON_ARRAY_ELEMENTS(authorized->'states') AS j(states)
          ORDER BY j.states->>'state_code' ) AS ns
      

      Demo

      【讨论】:

        猜你喜欢
        • 2020-12-15
        • 1970-01-01
        • 2017-05-04
        • 2015-08-31
        • 2014-02-25
        • 1970-01-01
        • 1970-01-01
        • 2020-09-28
        • 2014-06-07
        相关资源
        最近更新 更多