Jupyter Notebook JASON Datei funktioniert nicht

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

Hallo, ich habe mit Java aus einer HTML Datei eine Jason Datei entwickelt. Diese heißt U_4_new.ipynb und hat folgendes Aussehen:

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!DOCTYPE html>\n",
"<html>\n",
"<body>\n",
"\n",
"\n",
"<h1>This is heading 1</h1>\n",
"<p>This is a paragraph.</p>\n",
"<p>This is a paragraph.</p>\n",
"<p>This is a paragraph.</p>\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h1>This is heading 1</h1>\n",
"<p>This is a paragraph.</p>\n",
"<p>This is a paragraph.</p>\n",
"<p>This is a paragraph.</p>\n",
"\n",
"</body>\n",
"</html>\n
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.9"
}
},
"nbformat": 4,
"nbformat_minor": 0
}


Diese Datei wird von Jupyter Notebook nicht als JASON Datei erkannt. Eine analoge Datei funktioniert aber, sie hat folgenden Code:


{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!DOCTYPE html>\n",
"<html>\n",
"<body>\n",
"\n",
"\n",
"<h1>This is heading 1</h1>\n",
"<p>This is a paragraph.</p>\n",
"<p>This is a paragraph.</p>\n",
"<p>This is a paragraph.</p>\n",
"\n",
"<h1>This is heading 1</h1>\n",
"<p>This is a paragraph.</p>\n",
"<p>This is a paragraph.</p>\n",
"<p>This is a paragraph.</p>\n",
"\n",
"</body>\n",
"</html>\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h1>This is heading 1</h1>\n",
"<p>This is a paragraph.</p>\n",
"<p>This is a paragraph.</p>\n",
"<p>This is a paragraph.</p>\n",
"\n",
"<h1>This is heading 1</h1>\n",
"<p>This is a paragraph.</p>\n",
"<p>This is a paragraph.</p>\n",
"<p>This is a paragraph.</p>"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.9"
}
},
"nbformat": 4,
"nbformat_minor": 0
}



Woran liegt das. Ist vielleicht beim Schreiben der ersten Datei mit Java aus HTML eine unbeabsichtigte Formatierung mit codiert?
BlackJack

@Brando: Das erste ist kein fehlerfreies JSON (und da ist kein A drin in dem Namen).

Wie erstellst Du das denn? Falls Du das selber mit Zeichenketten zusammenbaust statt eine entsprechende Bibliothek zu verwenden, dann hör am besten auf das selber mit Zeichenketten zusammen zu bauen und nimm eine entsprechende Bibliothek. Ist ja nicht so als wenn da ein Mangel an Auswahl herrschen würde, wenn man sich die Liste auf http://json.org / anschaut.
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

Warum ist das kein fehlerfreies JASON; es ist doch strukturell das gleiche wie Untitled4.ipynb; was bedeutet: A ist nicht im Namen enthalten?
BlackJack

@Brando: Das heisst JSON und nicht JASON.

Warum das kein fehlerfreies JSON ist kannst Du doch selbst leicht herausfinden wenn Du Dir die Daten mal in einem Editor mit farbiger Syntaxhervorhebung für JSON anschaust. Falls Du die Stelle dann immer noch nicht findest, hilft es auch das mal als JSON parsen zu lassen. Da bekommst Du die Zeile und Spalte in der Ausnahme angezeigt an der der Parser das nicht mehr versteht.
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

Das habe ich gemacht, und es wird auf der Zeile mit den dritten metadata angezeigt, dass ein Komma erwartet wird anstatt eines m. Das gibt aber keinen Sinn. Diese Stelle ist ganz gleich zu dem funktionierenden Code. Auch wenn ich ein Komma setze statt m funktioniert es nicht.
BlackJack

@Brando: Das ist nicht der Fehler den ich bekomme: ValueError: Invalid control character at: line 29 column 15 (char 566)

Und wie gesagt: Bei farbiger Syntaxhervorhebung sieht man doch recht deutlich ab wo es falsch läuft: http://pastebin.com/UQgDP2PT
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

Habe jetzt den Fehler gefunden, und behoben. Es dürfen in einer Zelle nicht isoliert </body> und </html> vorkommen. Jetzt funktioniert alles. Vielen Dank für die Tipps.
BlackJack

@Brando: Das war nicht der Fehler. JSON sind HTML-Tags völlig egal. Wenn Du die beiden letzten Elemente des Arrays entfernt hast, dann hast Du auch den JSON-Syntaxfehler mit entfernt, denn in Zeile 29 ist der ja enthalten. Versuch den Fehler zu identifizieren, denn nur so kannst Du sicherstellen, dass Du ihn nicht wieder machst und dann etwas machst um den zu beseitigen was ihn nur zufällig beseitigt. Das klappt ja vielleicht nicht jedes mal so einfach.

Und es ist immer noch die Frage offen wie Du die Daten in Java erzeugst, denn nach wie vor sind Zeichenkettenoperationen das falsche Mittel dafür. Das wartet nur darauf das es beim nächsten Problem wieder auf die Nase fällt, und das wo es doch so viele Bibliotheken gibt, die JSON *sicher* fehlerfrei erzeugen können. Da macht es wenig Sinn das Rad *noch mal* neu zu erfinden.
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

Was sind das für Bibliotheken? Für welche Sprache? Und kann ich da einen html Code einlesen und ihn in JSON Code mit entsprechender Zelleinteilung ausgeben?
BlackJack

@Brando: Na Bibliotheken um mit dem Datenformat JSON korrekt umzugehen. Und da Du in Deinem ersten Beitrag schreibst, dass Du das mit Java machst, halt eine Bibliothek für Java. Da gibt's wirklich viel Auswahl. Wie gesagt, http://json.org/ listet da *einiges* auf. Für Java, aber auch für alle möglichen anderen Programmiersprachen.

HTML und das Jupyter-Notebook-Format haben damit erst einmal nichts zu tun, die Daten und die Struktur musst Du schon selber zur Verfügung stellen.

Jupyter-Notebooks kommen in Markdown-Zellen übrigens grundsätzlich mit <head> und <body> Tags klar, aber sinnvoll ist das natürlich nicht.

Was versuchst Du da eigentlich zu machen? Wenn ich mir die Fragen so anschaue scheinst Du da LaTeX und HTML und was weiss ich nicht noch alles per Java-Programmen in ein Jupyter-Notebook zwängen zu wollen? Warum um Himmels willen? :-) Also alleine Java löst bei mir schon diese Frage aus, denn gerade für Textverarbeitung und/oder Webscraping nimmt man doch kein Java wenn man dazu nicht gezwungen wird. :twisted:

Edit: Ich habe den Syntaxfehler in dem ersten JSON behoben und das dann mal in einem Jupyter-Notebook geladen. Das ging problemlos. <html> und <body> Tags oder auch Endtags würde ich trotzdem entfernen, weil die keinen Sinn in Zellen eines Notebooks machen, aber Probleme bereiten die auch nicht.
Antworten