来自 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
的结果给了我两个问题:
- 输出为项目符号列表格式
- 每一列 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
中完成
我在网上看到了很多这样的例子,但是我没有找到任何可以帮助我解决我所面临的问题的东西。我正在尝试将 JSON object 转换为 HTML table,但我遇到了几个问题。
假设我有以下 object,称它为 tableJson
,它本质上代表了一个只有 header 列的 table:
[
{
"firstColumn": []
},
{
"secondColumn": []
},
{
"thirdColumn": []
}
]
在尝试将其转换为 HTML table 时,我做了以下操作:
jsonDumps = json.dumps(jsonTable)
htmlTable = json2html.convert(json = jsonDumps)
看起来很简单。但是,htmlTable
的结果给了我两个问题:
- 输出为项目符号列表格式
- 每一列 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