2017-06-26 2 views
1

Ich versuche eine Antwort von einer API zu erhalten, die ein JSON-Objekt zurückmeldet und dieses in eine Markdown-Ausgabe konvertiert, um sie in einem besser lesbaren Format darzustellen. Ich versuche, py- pandoc dazu zu benutzen und ich habe gerade viel Zeit herauszufinden, wie ich es zum Laufen bringen kann.Wie konvertiert man JSON-Objekt mit pypandoc in markdown, ohne in Datei zu schreiben?

Ich würde erwarten, dass das Folgende auf der Grundlage der Dokumentation von Pandoc funktioniert, aber die pypandoc Dokumente und Beispiele sind knapp.

from ipwhois import IPWhois 

obj = IPWhois('74.125.225.229') 
results = obj.lookup_rdap(depth=1) 
print(pypandoc.convert_text(results, 'json', 'md')) 



--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
<ipython-input-6-6a5e630f5495> in <module>() 
     4 obj = IPWhois('74.125.225.229') 
     5 results = obj.lookup_rdap(depth=1) 
----> 6 print(pypandoc.convert_text(results, 'json', 'md')) 

C:\ProgramData\Anaconda3\lib\site-packages\pypandoc\__init__.py in convert_text(source, to, format, extra_args, encoding, outputfile, filters) 
    101  source = _as_unicode(source, encoding) 
    102  return _convert_input(source, format, 'string', to, extra_args=extra_args, 
--> 103       outputfile=outputfile, filters=filters) 
    104 
    105 

C:\ProgramData\Anaconda3\lib\site-packages\pypandoc\__init__.py in _convert_input(source, format, input_type, to, extra_args, outputfile, filters) 
    303 
    304  try: 
--> 305   source = cast_bytes(source, encoding='utf-8') 
    306  except (UnicodeDecodeError, UnicodeEncodeError): 
    307   # assume that it is already a utf-8 encoded string 

C:\ProgramData\Anaconda3\lib\site-packages\pypandoc\py3compat.py in cast_bytes(s, encoding) 
    37  # bytes == str on py2.7 -> always encode on py2 
    38  if not isinstance(s, bytes): 
---> 39   return _encode(s, encoding) 
    40  return s 
    41 

C:\ProgramData\Anaconda3\lib\site-packages\pypandoc\py3compat.py in _encode(u, encoding) 
    25 def _encode(u, encoding=None): 
    26  encoding = encoding or _DEFAULT_ENCODING 
---> 27  return u.encode(encoding) 
    28 
    29 

AttributeError: 'dict' object has no attribute 'encode' 

Wenn jemand einen besseren Weg weiß dies zu konvertieren, ohne es auf eine Datei zu schreiben wäre ich sehr dankbar, wenn Sie es geteilt.

zum Schreiben und Lesen von Dateiversion:

from ipwhois import IPWhois 
from pprint import pprint 
import json, pypandoc 

obj = IPWhois('74.125.225.229') 
results = obj.lookup_rdap(depth=1) 
pprint(results) 
with open('data.json', 'w') as outfile: 
    json.dump(results, outfile) 
output = pypandoc.convert_file('data.json', to='json', format='md',outputfile="data.md") 

Antwort

0

Kommentar: Ich sollte in der Lage sein, diese

in Erinnerung zu tun, zeigen Sie Ihren Code es zu tun/aus Datei.
Es sollte in Memory mit einem StringIO Objekt möglich sein.

results Typ ist dict, zu str ändern json.dumps(... mit aus der Datei die gleiche sein sollte wie das Lesen:

print(pypandoc.convert_text(json.dumps(results), 'json', 'md')) 

Frage: Ich würde erwarten, auf der die folgenden arbeiten auf Basis dokumentation von pandoc
... konvertieren sie das in ... in einem besser lesbaren format.

Sie müssen es selbst konvertieren, entweder md oder HTML.
Es ist die gleiche Mühe wie das folgende Beispiel:

Convert JSON to PDF with Python and xtopdf

Dieses Rezept zeigen die grundlegenden Schritte erforderlich JSON Eingang PDF-Ausgabe, mit Python und xtopdf,
ein PDF-Erstellung Toolkit zu konvertieren. xtopdf ist selbst in Python geschrieben und verwendet das ReportLab-Toolkit intern.

+0

pypandoc ein Wrapper für pandoc seinen Zugriff auf alle Funktionen von pandoc haben sollte, die deutlich zeigen, dass ist in der Lage, die Umwandlung hier: http://pandoc.org/index.html kann ich zusätzlich erhalten es zu konvertieren, wenn ich die info in eine datei schreibe, wandle die datei um und lese sie in den speicher zurück, allerdings sollte ich das im gedächtnis machen können ich kann einfach nicht herausfinden, wie. –

+0

https: //pypi.python.org/pypi/pyandoc/zeigt Formate zur Verfügung: asciidoc Beamer commonmark Kontext docbook doc- x dokuwiki dzslides epub EPUB3 fb2 Schellfisch html html5 ICML json (pandoc AST) latex man markdown markdown_github markdown_mmd markdown_phpextra markdown_strict mediawiki nativen odt OpenDocument- opml org pdf Ebene revealjs ersten rtf s5, slideous slidy texinfo Textil und pandoc zeigt es hier http://pandoc.org/ diagram.jpg –

+0

Sieht so aus, als hätte ich beim Schreiben in eine Datei nicht besonders auf die Ausgabe geachtet. Es ändert die Daten, aber es wird nicht zum tatsächlichen Abschlag, selbst wenn es in eine Datei geschrieben wird. Wenn ich erraten müsste, dass es vielleicht in Pandav AST umgewandelt wurde? –

Verwandte Themen