来自 json2html 模块的错误结果

Incorrect results from json2html module

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

假设我有以下 object,称它为 tableJson,它本质上代表了一个只有 header 列的 table:

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

在尝试将其转换为 HTML table 时,我做了以下操作:

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

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

  1. 输出为项目符号列表格式
  2. 每一列 header 都被视为单独的 table

比如上面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>

创建 table(正确)的简单方法是什么,这样我就不会在项目符号列表中包含它,并且每一列都被视为正确的列而不是 table?

JSON object 的表示方式有问题吗?如果是这样,那么 json2html 将其正确转换为 table 的正确语法是什么?

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

起始值

>>> 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          []

扁平化听写列表和显示

How do I merge a list of dicts into a single dict?

>>> 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() method 使用不同的参数来省略索引等主要 table 功能,其余的在 CSS

中完成