前言
我完全知道,将JSON (复杂数据结构)转换为MD (标记语言)可能是一个定义不明确的概念,因为它们不能表示相同的东西。无论如何,我认为它可以用于简单的结构,如嵌套列表。
关于pypandoc和这种转换的文档很少,无论如何,我阅读this post时有一个类似的问题,我想知道它是否可以实现,但我无法使它像预期的那样工作。
MCVE
假设我想将一些简单的JSON嵌套列表转换为MD嵌套列表。这是我的MCVE
import json
import pypandoc
items = [
"Item A",
"Item B",
"Item C:", ["Sub Item C.1", "Sub Item C.2", "Sub Item C.3"],
"Item D", ["Sub Item D.1", "Sub Item D.2"],
"Item E"
]
result = pypandoc.convert_text(json.dumps(items), to="json", format="md")它显然返回一个JSON字符串:
'{"pandoc-api-version":[1,22,2,1],"meta":{},"blocks":[{"t":"Para","c":[{"t":"Str","c":"["},{"t":"Quoted","c":[{"t":"DoubleQuote"},[{"t":"Str","c":"Item"},{"t":"Space"},{"t":"Str","c":"A"}]]},{"t":"Str","c":","},{"t":"Space"},{"t":"Quoted","c":[{"t":"DoubleQuote"},[{"t":"Str","c":"Item"},{"t":"Space"},{"t":"Str","c":"B"}]]},{"t":"Str","c":","},{"t":"Space"},{"t":"Quoted","c":[{"t":"DoubleQuote"},[{"t":"Str","c":"Item"},{"t":"Space"},{"t":"Str","c":"C:"}]]},{"t":"Str","c":","},{"t":"Space"},{"t":"Str","c":"["},{"t":"Quoted","c":[{"t":"DoubleQuote"},[{"t":"Str","c":"Sub"},{"t":"Space"},{"t":"Str","c":"Item"},{"t":"Space"},{"t":"Str","c":"C.1"}]]},{"t":"Str","c":","},{"t":"Space"},{"t":"Quoted","c":[{"t":"DoubleQuote"},[{"t":"Str","c":"Sub"},{"t":"Space"},{"t":"Str","c":"Item"},{"t":"Space"},{"t":"Str","c":"C.2"}]]},{"t":"Str","c":","},{"t":"Space"},{"t":"Quoted","c":[{"t":"DoubleQuote"},[{"t":"Str","c":"Sub"},{"t":"Space"},{"t":"Str","c":"Item"},{"t":"Space"},{"t":"Str","c":"C.3"}]]},{"t":"Str","c":"],"},{"t":"Space"},{"t":"Quoted","c":[{"t":"DoubleQuote"},[{"t":"Str","c":"Item"},{"t":"Space"},{"t":"Str","c":"D"}]]},{"t":"Str","c":","},{"t":"Space"},{"t":"Str","c":"["},{"t":"Quoted","c":[{"t":"DoubleQuote"},[{"t":"Str","c":"Sub"},{"t":"Space"},{"t":"Str","c":"Item"},{"t":"Space"},{"t":"Str","c":"D.1"}]]},{"t":"Str","c":","},{"t":"Space"},{"t":"Quoted","c":[{"t":"DoubleQuote"},[{"t":"Str","c":"Sub"},{"t":"Space"},{"t":"Str","c":"Item"},{"t":"Space"},{"t":"Str","c":"D.2"}]]},{"t":"Str","c":"],"},{"t":"Space"},{"t":"Quoted","c":[{"t":"DoubleQuote"},[{"t":"Str","c":"Item"},{"t":"Space"},{"t":"Str","c":"E"}]]},{"t":"Str","c":"]"}]}]}\r\n'它似乎是需要编码的内部表示,但这不是MD。
但我期待着这个输出:
- Item A
- Item B
- Item C
- Sub Item C.1
- Sub Item C.2
- Sub Item C.3
- Item D
- Sub Item D.1
- Sub Item D.2
- Item E奇怪的是,开关to和format的术语混淆,似乎表明从MD到JSON的转换。
当按相反顺序配置调用时,它不幸地失败了:
result = pypandoc.convert_text(json.dumps(items), format="json", to="md")
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_7128/3771718373.py in <module>
----> 1 result = pypandoc.convert_text(json.dumps(items), format="json", to="md")
~\anaconda3\lib\site-packages\pypandoc\__init__.py in convert_text(source, to, format, extra_args, encoding, outputfile, filters, verify_format, sandbox, cworkdir)
91 """
92 source = _as_unicode(source, encoding)
---> 93 return _convert_input(source, format, 'string', to, extra_args=extra_args,
94 outputfile=outputfile, filters=filters,
95 verify_format=verify_format, sandbox=sandbox,
~\anaconda3\lib\site-packages\pypandoc\__init__.py in _convert_input(source, format, input_type, to, extra_args, outputfile, filters, verify_format, sandbox, cworkdir)
416 # check that pandoc returned successfully
417 if p.returncode != 0:
--> 418 raise RuntimeError(
419 'Pandoc died with exitcode "%s" during conversion: %s' % (p.returncode, stderr)
420 )
RuntimeError: Pandoc died with exitcode "64" during conversion: JSON parse error: Error in $: mempty所以我想知道是否有可能使用pypandoc将JSON转换成MD
对于在第一个示例中返回的JSON,我要做的是,它是否是一个内部pandoc表示,之后确实可以转换为MD?我错过了什么来实现这个转变?
发布于 2022-09-28 11:50:40
虽然没有直接回答问题,但似乎可以通过使用snakemd实现预期的输出。
import snakemd
items = snakemd.MDList([
"Item A",
"Item B",
"Item C:", snakemd.MDList(["Sub Item C.1", "Sub Item C.2", "Sub Item C.3"]),
"Item D", snakemd.MDList(["Sub Item D.1", "Sub Item D.2"]),
"Item E"
])
items.render()返回:
- Item A
- Item B
- Item C:
- Sub Item C.1
- Sub Item C.2
- Sub Item C.3
- Item D
- Sub Item D.1
- Sub Item D.2
- Item E但这并不能回答原来的问题。
https://stackoverflow.com/questions/73880795
复制相似问题