Есть ли способ сохранить порядок, в котором строки группы отображаются в тексте в результате запроса regexp_matches? - PullRequest
0 голосов
/ 06 мая 2020

Я использую postgresql, и у меня есть эта таблица в наборе данных, в которой некоторые столбцы являются jsonb.

 create_table "table", force: :cascade do |t|
   t.string "title", null: false
   t.text "objectives"
   t.bigint "institution_id", null: false
   t.integer "code"
   t.jsonb "external_data", default: {}
   t.string "external_id"
   t.jsonb "extra_fields", default: []
   t.bigint "template_id"

Итак, результат для столбца «цели» выглядит следующим образом:

{"blocks":[{"key":"dek2k","text":"Objetivo Geral","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":0,"length":14,"style":"fontsize-12pt"},{"offset":0,"length":14,"style":"fontfamily-Arial"},{"offset":0,"length":14,"style":"fontsize-14"}],"entityRanges":[],"data":{"text-align":"start"}},{"key":"ct1vn","text":"Conhecer e aplicar ferramentas para análise da mídias em sua respectiva relação com a cognição e o design, tendo como ênfase os estudos das materialidades dos meios de comunicaçõe e seus aspectos sensoriais.","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":0,"length":216,"style":"color-rgb(0,0,0)"},{"offset":0,"length":216,"style":"fontsize-12pt"},{"offset":0,"length":216,"style":"fontfamily-Arial"},{"offset":0,"length":216,"style":"fontsize-14"}],"entityRanges":[],"data":{}},{"key":"8jshq","text":"","type":"unstyled","depth":0,"inlineStyleRanges":[],"entityRanges":[],"data":{}},{"key":"8jdns","text":"Objetivos Específicos","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":0,"length":22,"style":"fontsize-12pt"},{"offset":0,"length":22,"style":"fontfamily-Arial"},{"offset":0,"length":22,"style":"fontsize-14"}],"entityRanges":[],"data":{"text-align":"start"}},{"key":"6tncp","text":"O estudante deverá ser capaz de:","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":0,"length":33,"style":"color-rgb(0,0,0)"},{"offset":0,"length":33,"style":"fontsize-12pt"},{"offset":0,"length":33,"style":"fontfamily-Arial"},{"offset":0,"length":33,"style":"fontsize-14"}],"entityRanges":[],"data":{}},{"key":"85t8d","text":"Compreender a importância da comunicação multissensorial e seus impactos no","type":"unordered-list-item","depth":0,"inlineStyleRanges":[{"offset":0,"length":78,"style":"color-rgb(0,0,0)"},{"offset":0,"length":78,"style":"fontsize-12pt"},{"offset":0,"length":78,"style":"fontfamily-Arial"},{"offset":0,"length":78,"style":"fontsize-14"}],"entityRanges":[],"data":{}},{"key":"23i4","text":"cenário da publicidade e propaganda;","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":0,"length":37,"style":"color-rgb(0,0,0)"},{"offset":0,"length":37,"style":"fontsize-12pt"},{"offset":0,"length":37,"style":"fontfamily-Arial"},{"offset":0,"length":37,"style":"fontsize-14"}],"entityRanges":[],"data":{}},{"key":"7afba","text":"Refletir em torno das articulações entre diferentes sensorialidades que participam do","type":"unordered-list-item","depth":0,"inlineStyleRanges":[{"offset":0,"length":87,"style":"color-rgb(0,0,0)"},{"offset":0,"length":87,"style":"fontsize-12pt"},{"offset":0,"length":87,"style":"fontfamily-Arial"},{"offset":0,"length":87,"style":"fontsize-14"}],"entityRanges":[],"data":{}},{"key":"3cf0b","text":"processo de comunicação;","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":0,"length":26,"style":"color-rgb(0,0,0)"},{"offset":0,"length":26,"style":"fontsize-12pt"},{"offset":0,"length":26,"style":"fontfamily-Arial"},{"offset":0,"length":26,"style":"fontsize-14"}],"entityRanges":[],"data":{}},{"key":"80scf","text":"Compreender a relação direta entre a emergência de um meio e de suas linguagens e","type":"unordered-list-item","depth":0,"inlineStyleRanges":[{"offset":0,"length":84,"style":"color-rgb(0,0,0)"},{"offset":0,"length":84,"style":"fontsize-12pt"},{"offset":0,"length":84,"style":"fontfamily-Arial"},{"offset":0,"length":84,"style":"fontsize-14"}],"entityRanges":[],"data":{}},{"key":"4s662","text":"a produção de novos modos de perceber e conhecer.","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":0,"length":51,"style":"color-rgb(0,0,0)"},{"offset":0,"length":51,"style":"fontsize-12pt"},{"offset":0,"length":51,"style":"fontfamily-Arial"},{"offset":0,"length":51,"style":"fontsize-14"}],"entityRanges":[],"data":{}},{"key":"4crr0","text":"Compreender, analisar e desenvolver estratégias criativas de comunicação por meio","type":"unordered-list-item","depth":0,"inlineStyleRanges":[{"offset":0,"length":84,"style":"color-rgb(0,0,0)"},{"offset":0,"length":84,"style":"fontsize-12pt"},{"offset":0,"length":84,"style":"fontfamily-Arial"},{"offset":0,"length":84,"style":"fontsize-14"}],"entityRanges":[],"data":{}},{"key":"f963p","text":"da arte e das linguagens multissensoriais para interfaces e ambientes digitais;","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":0,"length":79,"style":"color-rgb(0,0,0)"},{"offset":0,"length":79,"style":"fontsize-12pt"},{"offset":0,"length":79,"style":"fontfamily-Arial"},{"offset":0,"length":79,"style":"fontsize-14"}],"entityRanges":[],"data":{}},{"key":"dkc1n","text":"Criar ambientes multissensoriais e estratégias de ‘gamification’ em mensagens publicitárias contemporâneas, usando o conceito de flow para potencializar","type":"unordered-list-item","depth":0,"inlineStyleRanges":[{"offset":0,"length":155,"style":"color-rgb(0,0,0)"},{"offset":0,"length":155,"style":"fontsize-12pt"},{"offset":0,"length":155,"style":"fontfamily-Arial"},{"offset":0,"length":155,"style":"fontsize-14"}],"entityRanges":[],"data":{}},{"key":"avq4h","text":"experiências digitais.","type":"unstyled","depth":0,"inlineStyleRanges":[{"offset":0,"length":23,"style":"color-rgb(0,0,0)"},{"offset":0,"length":23,"style":"fontsize-12pt"},{"offset":0,"length":23,"style":"fontfamily-Arial"},{"offset":0,"length":23,"style":"fontsize-14"}],"entityRanges":[],"data":{}}],"entityMap":{}}

Я хочу получить в результате только то, что находится в «тексте». Иногда у него всего одно «текстовое» значение, иногда до 15 и более. Учитывая это, я использовал такой запрос:

SELECT cod
name,
array_agg(obj) AS obj
from ( SELECT 
external_id as cod,
title as name,
regexp_matches(objectives, 'text.+?:"(.+)"','ig') obj
FROM table
WHERE institution_id = 27
AND objectives != '[]'
)  a
GROUP BY cod, name

Но я получаю группу текстовых строк, которая соответствует не по порядку. Примерно так:

{{"\","},{"a produção de novos modos de perceber e conhecer."},{"cenário da publicidade e propaganda;"},{"Compreender a importância da comunicação multissensorial e seus impactos no"},{"Compreender, analisar e desenvolver estratégias criativas de comunicação por meio"},{"Compreender a relação direta entre a emergência de um meio e de suas linguagens e"},{"Conhecer e aplicar ferramentas para análise da mídias em sua respectiva relação com a cognição e o design, tendo como ênfase os estudos das materialidades dos meios de comunicaçõe e seus aspectos sensoriais."},{"Criar ambientes multissensoriais e estratégias de ‘gamification’ em mensagens publicitárias contemporâneas, usando o conceito de flow para potencializar"},{"da arte e das linguagens multissensoriais para interfaces e ambientes digitais;"},{"experiências digitais."},{"Objetivo Geral"},{"Objetivos Específicos"},{"O estudante deverá ser capaz de:"},{"processo de comunicação;"},{"Refletir em torno das articulações entre diferentes sensorialidades que participam do"},{start}}

Мне нужно получить текст в том же порядке, в котором он отображается в исходном значении. Итак, в этом примере первое «текстовое» значение, которое появляется в коде:

{"Objetivo Geral"}

Второе:

{"Conhecer e aplicar ferramentas para análise da mídias em sua respectiva relação com a cognição e o design, tendo como ênfase os estudos das materialidades dos meios de comunicaçõe e seus aspectos sensoriais."}

Итак, в массиве первые два текста значения должны быть такими:

{"Objetivo Geral"},{"Conhecer e aplicar ferramentas para análise da mídias em sua respectiva relação com a cognição e o design, tendo como ênfase os estudos das materialidades dos meios de comunicaçõe e seus aspectos sensoriais."}

Если возможно, не в формате массива (но это нормально, если это невозможно).

Я бы хотел получить такой результат (текст в в том же порядке и без массивов):

Objetivo Geral
Conhecer e aplicar ferramentas para análise da mídias em sua respectiva relação com a cognição e o design, tendo como ênfase os estudos das materialidades dos meios de comunicaçõe e seus aspectos sensoriais.
Objetivos Específicos
O estudante deverá ser capaz de:
Compreender a importância da comunicação multissensorial e seus impactos no
cenário da publicidade e propaganda;
Refletir em torno das articulações entre diferentes sensorialidades que participam do
processo de comunicação;
Compreender a relação direta entre a emergência de um meio e de suas linguagens e
a produção de novos modos de perceber e conhecer.
Compreender, analisar e desenvolver estratégias criativas de comunicação por meio
da arte e das linguagens multissensoriais para interfaces e ambientes digitais;
Criar ambientes multissensoriais e estratégias de ‘gamification’ em mensagens publicitárias contemporâneas, usando o conceito de flow para potencializar
experiências digitais.

Кто-нибудь может помочь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...