以随机顺序从 JSON 数组中获取元素

Get elements from JSON array in random order

使用 PostgreSQL 9.4,我在 plpgsql 代码中将数据存储为 JSON 数组,例如:

j := '[1,2,3,4,5]'::json

接下来我遍历这个数组并对数字做一些处理。

FOR i1 IN 0..(json_array_length(j)-1) LOOP
   RAISE NOTICE 'i1=%', j->>(i1);
END LOOP;

我得到这个输出:

1
2
3
4
5

如何获得循环的随机排序顺序?喜欢:

3
5
1
2
4
  1. 创建新的键数组(从 0 到 4)
SELECT INTO intarray array_agg(s.n)
FROM (SELECT generate_series(0,json_array_length(j)-1) AS n
ORDER BY random()) s
  1. 在主循环中,根据新数组的值从 j 数组获取值
FOR i1 IN 0..(json_array_length(j)-1) LOOP

   RAISE NOTICE 'i1=%', j->>(intarray[i1]);

END LOOP;

使用generate_series():

select '[1,2,3,4,5]'::json->>(i) 
from generate_series(0, 4) i
order by random();

保持简单,只需使用 json_array_elements_textORDER BY random()

  DECLARE
    item text
  BEGIN
    FOR item IN
      SELECT json_array_elements_text('[1,2,3,4,5]'::json) ORDER BY random()
    LOOP
       RAISE NOTICE 'item is %',item;
    END LOOP;
  END;