1

我在网上看到过很多这样的例子,但我没有找到任何可以帮助我解决我面临的问题的东西。我正在尝试将 JSON 对象转换为 HTML 表,但我遇到了几个问题。

假设我有以下对象,称为它tableJson,它本质上代表只有列标题的表:

[
  {
    "firstColumn": []
  },
  {
    "secondColumn": []
  },
  {
    "thirdColumn": []
  }
]

在尝试将其转换为 HTML 表格时,我执行了以下操作:

jsonDumps = json.dumps(jsonTable)
htmlTable = json2html.convert(json = jsonDumps)

看起来很简单。但是,结果htmlTable给了我两个问题:

  1. 输出采用项目符号列表格式
  2. 每个列标题都被视为一个单独的表

例如,htmlTable上面的结果是:

<ul>
  <li>
    <table border="1">
      <tr><th>firstColumn</th><td></td></tr>
    </table>
  </li>
  <li>
    <table border="1">
      <tr><th>secondColumn</th><td></td></tr>
    </table>
  </li>
  <li>
    <table border="1">
      <tr><th>thirdColumn</th><td></td></tr>
    </table>
  </li>
</ul>

(正确)创建表的简单方法是什么,以便我没有将它放在项目符号列表中,并且每列都被视为正确的列而不是表?

JSON对象的表示方式有问题吗?如果是这样,正确的语法是什么json2html才能正确地将其转换为表格?

4

1 回答 1

1

如果您的表格,原始结构存在一些问题,当您尝试从中创建 DataFrame 时会更清楚;如果您首先将其重组为单个 dict,您可能会发现使用起来更容易,并且可以直接使用 Pandas 来呈现您的表格

起始值

>>> import pandas as pd
>>> src_table = [
...   {
...     "firstColumn": []
...   },
...   {
...     "secondColumn": []
...   },
...   {
...     "thirdColumn": []
...   }
... ]

问题演示

(每一列都是唯一的,而不是在同一个集合中)

>>> pd.DataFrame(src_table)
  firstColumn secondColumn thirdColumn
0          []          NaN         NaN
1         NaN           []         NaN
2         NaN          NaN          []

扁平化听写列表和显示

请参阅如何将字典列表合并到单个字典中?

>>> src_flattened = dict(pair for d in src_table for pair in d.items())
>>> src_flattened
{'firstColumn': [], 'secondColumn': [], 'thirdColumn': []}
>>> df = pd.DataFrame(src_flattened)
>>> df
Empty DataFrame
Columns: [firstColumn, secondColumn, thirdColumn]
Index: []
>>> print(df.to_html())
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>firstColumn</th>
      <th>secondColumn</th>
      <th>thirdColumn</th>
    </tr>
  </thead>
  <tbody>
  </tbody>
</table>

渲染

表头呈现

插入了一些值

>>> pd.DataFrame({"col1": [1,2,3], "col2": [4,5,6], "col3": ['a', None, False]}).to_html()
'<table border="1" class="dataframe">\n  <thead>\n    <tr style="text-align: right;">\n      <th></th>\n      <th>col1</th>\n      <th>col2</th>\n      <th>col3</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>1</td>\n      <td>4</td>\n      <td>a</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>2</td>\n      <td>5</td>\n      <td>None</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>3</td>\n      <td>6</td>\n      <td>False</td>\n    </tr>\n  </tbody>\n</table>'

渲染

呈现填充表

.to_html()您可以对方法使用不同的参数来省略主要的表格功能,如索引,其余的在 CSS 中完成

于 2021-09-21T12:15:08.450 回答