def parse_table_schema(json, precise_float):
table = loads(json, precise_float=precise_float)<EOL>col_order = [field['<STR_LIT:name>'] for field in table['<STR_LIT>']['<STR_LIT>']]<EOL>df = DataFrame(table['<STR_LIT:data>'], columns=col_order)[col_order]<EOL>dtypes = {field['<STR_LIT:name>']: convert_json_field_to_pandas_type(field)<EOL>for field in table['<STR_LIT>']['<STR_LIT>']}<EOL>if any(str(x).startswith('<STR_LIT>') for x in dtypes.values()):<EOL><INDENT>raise NotImplementedError('<STR_LIT>'<EOL>'<STR_LIT:data>')<EOL><DEDENT>if '<STR_LIT>' in dtypes.values():<EOL><INDENT>raise NotImplementedError('<STR_LIT>'<EOL>'<STR_LIT>')<EOL><DEDENT>df = df.astype(dtypes)<EOL>if '<STR_LIT>' in table['<STR_LIT>']:<EOL><INDENT>df = df.set_index(table['<STR_LIT>']['<STR_LIT>'])<EOL>if len(df.index.names) == <NUM_LIT:1>:<EOL><INDENT>if df.index.name == '<STR_LIT:index>':<EOL><INDENT>df.index.name = None<EOL><DEDENT><DEDENT>else:<EOL><INDENT>df.index.names = [None if x.startswith('<STR_LIT>') else x for x in<EOL>df.index.names]<EOL><DEDENT><DEDENT>return df<EOL>
Builds a DataFrame from a given schema

Parameters
----------
json :
    A JSON table schema
precise_float : boolean
    Flag controlling precision when decoding string to double values, as
    dictated by ``read_json``

Returns
-------
df : DataFrame

Raises
------
NotImplementedError
    If the JSON table schema contains either timezone or timedelta data

Notes
-----
    Because :func:`DataFrame.to_json` uses the string 'index' to denote a
    name-less :class:`Index`, this function sets the name of the returned
    :class:`DataFrame` to ``None`` when said string is encountered with a
    normal :class:`Index`. For a :class:`MultiIndex`, the same limitation
    applies to any strings beginning with 'level_'. Therefore, an
    :class:`Index` name of 'index'  and :class:`MultiIndex` names starting
    with 'level_' are not supported.

See Also
--------
build_table_schema : Inverse function.
pandas.read_json