بوستجرس: كيفية تحويل سلسلة json إلى نص؟




postgresql (4)

طريقة سهلة للقيام بذلك:

SELECT  ('[' || to_json('Some "text"'::TEXT) || ']')::json ->> 0;

مجرد تحويل سلسلة json إلى قائمة json

قد تتكون قيمة Json من قيمة السلسلة. على سبيل المثال:

postgres=# SELECT to_json('Some "text"'::TEXT);
     to_json
-----------------
 "Some \"text\""

كيف يمكنني استخراج هذه السلسلة كقيمة نصية postgres؟

::TEXT لا يعمل. تقوم بإرجاع json المقتبسة ، وليس السلسلة الأصلية:

postgres=# SELECT to_json('Some "text"'::TEXT)::TEXT;
     to_json
-----------------
 "Some \"text\""

شكر.

ملاحظة: أنا أستخدم PostgreSQL 9.3


في 9.4.4 باستخدام #>> عامل يعمل بالنسبة لي:

select to_json('test'::text) #>> '{}';

للاستخدام مع عمود الجدول:

select jsoncol #>> '{}' from mytable;

هذا السؤال / الحل ينتج سؤالًا آخر ... بيان لمطوري PostgreSQL:
لماذا صب JSON- سلسلة لنص SQL بحاجة إلى اقتباسات؟
أوه ، هناك بعض dillema ... لماذا لا تسأل المستخدمين عما يفضلون؟

في SQL ، ينتج casting char (N) نصًا متوقعًا بدون عروض أسعار ؛ في لغة أو برنامج تشغيل مضمن ، ينتج عن صب نص SQL- نوع بيانات السلسلة المتوقع بدون اقتباسات ، وتنتج سلسلة الصب نص SQL- متوقع دون اقتباسات ... إنه السلوك العالمي المتوقع ...


وكان السيد فضولي فضولي حول هذا أيضا. بالإضافة إلى المشغل #>> '{}' ، في 9.6+ ، يمكن للمرء الحصول على قيمة سلسلة jsonb باستخدام عامل التشغيل ->> :

 select to_jsonb('Some "text"'::TEXT)->>0; ?column? ------------- Some "text" (1 row) 

إذا كان لدى أحدهم قيمة json ، فإن الحل يكمن في jsonb أولاً:

 select to_json('Some "text"'::TEXT)::jsonb->>0; ?column? ------------- Some "text" (1 row) 






postgresql