Postgres: How to convert a json string to text?

后端 未结 5 1200
遥遥无期
遥遥无期 2020-11-30 05:35

Json value may consist of a string value. eg.:

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


        
相关标签:
5条回答
  • 2020-11-30 05:41

    There is no way in PostgreSQL to deconstruct a scalar JSON object. Thus, as you point out,

    select  length(to_json('Some "text"'::TEXT) ::TEXT);
    

    is 15,

    The trick is to convert the JSON into an array of one JSON element, then extract that element using ->>.

    select length( array_to_json(array[to_json('Some "text"'::TEXT)])->>0 );
    

    will return 11.

    0 讨论(0)
  • 2020-11-30 05:43

    An easy way of doing this:

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

    Just convert the json string into a json list

    0 讨论(0)
  • 2020-11-30 05:45

    ->> works for me.

    postgres version:

    <postgres.version>11.6</postgres.version>
    

    Query:

    select object_details->'valuationDate' as asofJson, object_details->>'valuationDate' as asofText from MyJsonbTable;
    

    Output:

      asofJson       asofText
    "2020-06-26"    2020-06-26
    "2020-06-25"    2020-06-25
    "2020-06-25"    2020-06-25
    "2020-06-25"    2020-06-25
    
    0 讨论(0)
  • 2020-11-30 05:48

    In 9.4.4 using the #>> operator works for me:

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

    To use with a table column:

    select jsoncol #>> '{}' from mytable;
    
    0 讨论(0)
  • 2020-11-30 06:01

    Mr. Curious was curious about this as well. In addition to the #>> '{}' operator, in 9.6+ one can get the value of a jsonb string with the ->> operator:

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

    If one has a json value, then the solution is to cast into jsonb first:

    select to_json('Some "text"'::TEXT)::jsonb->>0;
      ?column?
    -------------
     Some "text"
    (1 row)
    
    0 讨论(0)
提交回复
热议问题