Python:将 markdown table 转换为 json

Python: Convert markdown table to json with

我想弄清楚,仅使用 python 将一些降价 table 文本转换为 json 的最简单方法是什么。例如,将其视为输入字符串:

| Some Title | Some Description             | Some Number |
|------------|------------------------------|-------------|
| Dark Souls | This is a fun game           | 5           |
| Bloodborne | This one is even better      | 2           |
| Sekiro     | This one is also pretty good | 110101      |

想要的输出应该是这样的:

[
    {"Some Title":"Dark Souls","Some Description":"This is a fun game","Some Number":5},
    {"Some Title":"Bloodborne","Some Description":"This one is even better","Some Number":2},
    {"Some Title":"Sekiro","Some Description":"This one is also pretty good","Some Number":110101}
]

注意:理想情况下,输出应符合 RFC 8259 标准,也就是在键值对周围使用双引号 " 而不是单引号 '。

我见过一些 JS 库可以做到这一点,但仅 python 没有。 有人可以向我解释实现此目的的最快方法是什么,这样我就不必为此编写自己的解析器了。

感谢所有帮助!

您可以将其视为多行字符串并在 \n|

处拆分时逐行解析它

执行此操作的简单代码:

import json

my_str='''| Some Title | Some Description             | Some Number |
|------------|------------------------------|-------------|
| Dark Souls | This is a fun game           | 5           |
| Bloodborne | This one is even better      | 2           |
| Sekiro     | This one is also pretty good | 110101      |'''

def mrkd2json(inp):
    lines = inp.split('\n')
    ret=[]
    keys=[]
    for i,l in enumerate(lines):
        if i==0:
            keys=[_i.strip() for _i in l.split('|')]
        elif i==1: continue
        else:
            ret.append({keys[_i]:v.strip() for _i,v in enumerate(l.split('|')) if  _i>0 and _i<len(keys)-1})
    return json.dumps(ret, indent = 4) 
print(mrkd2json(my_str))
[
    {
        "Some Title": "Dark Souls",
        "Some Description": "This is a fun game",
        "Some Number": "5"
    },
    {
        "Some Title": "Bloodborne",
        "Some Description": "This one is even better",
        "Some Number": "2"
    },
    {
        "Some Title": "Sekiro",
        "Some Description": "This one is also pretty good",
        "Some Number": "110101"
    }
]

PS:不知道有没有这样做的图书馆,如果我找到任何东西会更新!

我的方法与@Kuldeep Singh Sidhu 的非常相似:


md_table = """
| Some Title | Some Description             | Some Number |
|------------|------------------------------|-------------|
| Dark Souls | This is a fun game           | 5           |
| Bloodborne | This one is even better      | 2           |
| Sekiro     | This one is also pretty good | 110101      |
"""

result = []

for n, line in enumerate(md_table[1:-1].split('\n')):
    data = {}
    if n == 0:
        header = [t.strip() for t in line.split('|')[1:-1]]
    if n > 1:
        values = [t.strip() for t in line.split('|')[1:-1]]
        for col, value in zip(header, values):
            data[col] = value
        result.append(data)

结果是:

[{'Some Title': 'Dark Souls',
  'Some Description': 'This is a fun game',
  'Some Number': '5'},
 {'Some Title': 'Bloodborne',
  'Some Description': 'This one is even better',
  'Some Number': '2'},
 {'Some Title': 'Sekiro',
  'Some Description': 'This one is also pretty good',
  'Some Number': '110101'}]