title: Postgres: Expand JSON column into rows
body: <p>In a Postgres 9.3 database I have a table in which one column contains JSON, as in the test table shown in the example below.  </p>
  
  <pre><code>test=# create table things (id serial PRIMARY KEY, details json, other_field text);
  CREATE TABLE
  test=# \d things
                              Table "public.things"
     Column    |  Type   |                      Modifiers
  -------------+---------+-----------------------------------------------------
   id          | integer | not null default nextval('things_id_seq'::regclass)
   details     | json    |
   other_field | text    |
  Indexes:
      "things_pkey" PRIMARY KEY, btree (id)
  
  test=# insert into things (details, other_field) 
         values ('[{"json1": 123, "json2": 456},{"json1": 124, "json2": 457}]', 'nonsense');
  INSERT 0 1
  test=# insert into things (details, other_field) 
         values ('[{"json1": 234, "json2": 567}]', 'piffle');
  INSERT 0 1
  test=# select * from things;
   id |                           details                           | other_field
  ----+-------------------------------------------------------------+-------------
    1 | [{"json1": 123, "json2": 456},{"json1": 124, "json2": 457}] | nonsense
    2 | [{"json1": 234, "json2": 567}]                              | piffle
  (2 rows)
  </code></pre>
  
  <p>The JSON is always an array containing a variable number of hashes.  Each hash always has the same set of keys.  I am trying to write a query which returns a row for each entry in the JSON array, with columns for each hash key and the id from the things table.  I'm hoping for output like the following:</p>
  
  <pre><code> thing_id | json1 | json2
  ----------+-------+-------
          1 |   123 |   456
          1 |   124 |   457
          2 |   234 |   567
  </code></pre>
  
  <p>i.e. two rows for entries with two items in the JSON array.  Is it possible to get Postgres to do this?
  <code>json_populate_recordset</code> feels like an essential part of the answer, but I can't get it to work with more than one row at once.  </p>