Forum: Offtopic JSON ist nun Standard. Anpassen für µc?


von Washington I. (washington_i)


Lesenswert?

Hallo,

seit kurzem ist JSON offizeller ECMA-Standard:
http://www.ecma-international.org/publications/standards/Ecma-404.htm

Es ist ein einfaches Datenformat für fast beliebige Daten.

Hier im Forum gibts schon 73 Threads in denen JSON erwähnt wird.

Was nun fehlt: ein Standard als Pendant für mikrocontroller, ich nenne 
es mal "µSON".

Mein Vorschlag:
Statt unicode 7bit ascii, statt /u0000 hexadezimal /x00, /b00000000, 
/000, freiwilliges weglassen von Hochkommas.

Anwendung von µSON:
-Logdateien
-Konfiguration
-Messen und Steuern

Was ist von dieser Idee zu halten? Alternativ: gleich beim JSON Standard 
bleiben

Besser als XML wäre es allemal, es würde allen Daten eine einheitliche 
Form, die leicht zu erstellen und zu parsen ist, geben.

Grüße, Wash

von Falk B. (falk)


Lesenswert?

Hmm, kann man mal ein Beispiel dieses Dateiformats erstellen, denn nur 
die trockenen Syntaxabbildungen sind etwas, trocken.
Wobei ich nicht den großen Vorteil bei dem Format erkenne.
Ist doch nix großartig anderes als CSV.

von Washington I. (washington_i)


Lesenswert?

Ein paar Beispiele:

1. Beispiel: nur ein Parameter
{"PWM1":255}
oder
{"ERROR":"404 JSON NOT DEFINED"}
oder
{"COMMANDO":"SHUTDOWN"}

2. Beispiel: weggespeicherte Logdaten:
...
{GPS:{timestamp:0x000456, long:-40.00,lat:23.12}}
{TEMP:{timestamp:0x001123, value:21.2}}
{GPS:{timestamp:0x002755, long:-40.00,lat:23.12,velx:0.00,vely:0.02}}
{GPS:{timestamp:0x003234, height:5.55, long:-40.00,lat:23.12}}
...

Obiges kann nicht jeder JSON-Parser verstehen. Wenn man korrekt bleiben 
will, müsste man alle strings in Hochkomma packen und kein 0x00 
verwenden.

Der große Vorteil ist: Ein einziges Format, was für fast alles taugt.
CSV taugt nicht für Kommandos oder wenn man nicht alle Werte für alle 
Spalten hat, oder wenn man nicht die Bedeutung der Spalten kennt weil 
die Kopfzeile fehlt.

Es ist ein Format, was man leicht in jeder Programmiersprache erzeugen 
und parsen kann, und taugt auch für Android etc, es ist kompakter als 
XML, und kann dennoch bei Bedarf auch tief verschachtelte Daten erzeugen 
(Ob der Empfänger so tief Parsen kann liegt dann am Empfänger).

von Uhu U. (uhu)


Lesenswert?

Einen Vorteil gegenüber xml kann ich nicht erkennen.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Uhu Uhuhu schrieb:
> Einen Vorteil gegenüber xml kann ich nicht erkennen.

Ich schon. JSON ist zwar auch nicht das gelbe vom Ei, aber allemal 
besser als der XML-Schwachsinn. Schon mal einen XML-Parser programmiert?

von c. m. (Gast)


Lesenswert?

je lesbarer die formate sein sollen desto aufgeblasener werden sie - und 
platz/datenrate sind bei µc eigentlich eine knappe resource.
das ist irgendwie vergleichbar mit geschwindigkeit vs platzverbrauch… 
"code" der schnell sein soll braucht platz, "code" der klein sein soll 
ist nicht der schnellste.

also wenn interoperabilität im projekt wichtig ist dann ja, json oder 
xml, ansonsten eher ein proprietäres format.

von Uhu U. (uhu)


Lesenswert?

Michael Reinelt schrieb:
> Schon mal einen XML-Parser programmiert?

Nee, wieso auch? Man benutzt das Teil fertig und fertig...

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Genau. Strom kommt ja auch aus der Steckdose :-)

von Uhu U. (uhu)


Lesenswert?

Johann L. schrieb:
> Genau. Strom kommt ja auch aus der Steckdose :-)

Man kann natürlich auch das Rad neu erfinden...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Johann L. schrieb:
> Strom kommt ja auch aus der Steckdose :-)

Ja, oder erzeugst du deinen selbst?

Ein XML-Parser ist doch genauso einfach nur ein Werkzeug wie ein
Compiler oder eine Standardbilbiohtek.

von Washington I. (washington_i)


Lesenswert?

Ok, XML ist auch toll.

Aber..

JSON style:
{"Switch1":"On"}

XML style:
<switch value="on"></switch>
oder abgefahrener
<switch> <on></on></switch>
oder doch
<settings>
 <switches>
  <switch id="1">
   <value>On</value>
  </switch>
 </switches>
</settings>
oder doch etwas umfangreicheres mit komplexer DTD.

Was ich damit sagen will: mit XML kann man Unmengen an Schabernack 
treiben, man muss sich nur mal ein leeres docx Dokument anschauen.

XML ist eben als ein Dokumentenformat entwickelt worden, dessen 
Markuplanguageteil man aber auch für einfache Daten benutzen kann.
JSON ist dagegen konzipiert als Container für Daten mit Struktur, kleine 
Datenpakete, hatte also einen anderen Ansatz.

Gut, bisher kam also als Alternativen:
CSV - da fällt mir gerade NMEA ein.
XML - taugt gut für einzelne Dokumente, aber auch für Data Streams.
und natürlich gibt es eigene Formate, die sind selbstverständlich am 
kompaktesten.

von Axel S. (a-za-z0-9)


Lesenswert?

Michael Reinelt schrieb:
> Uhu Uhuhu schrieb:
>> Einen Vorteil gegenüber xml kann ich nicht erkennen.

Hähäh. Dito.

> Ich schon. JSON ist zwar auch nicht das gelbe vom Ei, aber allemal
> besser als der XML-Schwachsinn.

Es ist in erster Linie kompakter. Das wars dann schon.


XL

von Uhu U. (uhu)


Lesenswert?

Washington I. schrieb:
> XML ist eben als ein Dokumentenformat entwickelt worden, dessen
> Markuplanguageteil man aber auch für einfache Daten benutzen kann.

Einfache Daten? Nee, die können ziemlich verzwickt strukturiert sein.

> JSON ist dagegen konzipiert als Container für Daten mit Struktur,

xml auch.

Ich finde xml auch unleserlich und alles andere, als schön. Aber ich 
will es weder lesen, noch bestaunen...

von Georg A. (georga)


Lesenswert?

<switch v="on"/>

ist jetzt auch nicht viel länger als

{"Switch1":"On"}

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Washington I. schrieb:

> oder doch etwas umfangreicheres mit komplexer DTD.

DTD?  Das war doch im letzten Jahrtausend, oder? ;-)

XSD ist aktuell als Definitionsstandard.

> Was ich damit sagen will: mit XML kann man Unmengen an Schabernack
> treiben, man muss sich nur mal ein leeres docx Dokument anschauen.

Wobei die Office-Formate eher als schlechtes Beispiel herhalten.  Da
hat jemand in XML einfach nur den gleichen Krempel umgesetzt, den sie
vorher schon in ihrem proprietären Binärformat so gezimmert hatten.

von c. m. (Gast)


Lesenswert?

Washington I. schrieb:

> Was ich damit sagen will: mit XML kann man Unmengen an Schabernack
> treiben, man muss sich nur mal ein leeres docx Dokument anschauen.

docx beiseite. man kann mit einem xsd z.b. in einer oracle datenbank 
einfach ein datenmapping aufbauen und mit dem gleichen xsd und einem 
wsdl z.b. mit axis2 einen webservice generieren lassen der die daten aus 
vorhergehender datenbank übernimmt, verarbeitet und weiterleitet.
man kann sich mit xml also das entwicklerleben einfacher machen, aber 
eben wie ich schon schrieb auf kosten von speicherplatz, bandbreite und 
verarbeitungsgeschwindigkeit.

kommt immer auf den anwendungsfall an - deswegen einen standard zu 
definieren und darauf zu pochen das der auch benutzt werden muss ist 
unter umständen kontraproduktiv.

von Uhu U. (uhu)


Lesenswert?

Washington I. schrieb:
> freiwilliges weglassen von Hochkommas.

Ich nehme an, du meinst die Anführungszeichen.

Die weguzulassen ist eine ganz, ganz schlechte Idee, weil die Daten dann 
den Parser zum Absturz bringen können, z.B. wenn in einem Text : oder } 
steht.

von Yalu X. (yalu) (Moderator)


Lesenswert?

XML ist eine Auszeichnungssprache für Dokumente, JSON eine Sprache zur
Darstellung der Inhalte von Datenstrukturen. Auch wenn es Überlappungen
gibt, sind dies zunächst einmal zwei verschiedene Anwendungsbereiche.

Natürlich kann man Dokumente auch als Datenstruktur auffassen und somit
in JSON darstellen, wie in folgendem Beispiel gezeigt:

XML:
1
<dokument>
2
Dieser Text enthält <kursiv>kursive</kursiv> und <fett>fette</fett> Abschnitte.
3
</dokument>

JSON:
1
[
2
  {
3
    "auszeichnung": "normal",
4
    "text": "Dieser Text enthält "
5
  },
6
  {
7
    "auszeichnung": "kursiv",
8
    "text": "kursive"
9
  },
10
  {
11
    "auszeichnung": "normal",
12
    "text": " und "
13
  },
14
  {
15
    "auszeichnung": "fett",
16
    "text": "fette"
17
  },
18
  {
19
    "auszeichnung": "normal",
20
    "text": " Abschnitte."
21
  }
22
]

In XML können im laufenden Text weitere XML-Elemente stehen, was zu
einer recht übersichtlichen Darstellung führt. In JSON hingegen muss der
Text in mehrere Einzelstrukturen zerstückelt werden, so dass die
Darstellung nicht nur deutlich länger, sondern auch schwerer lesbar
wird.

Andersherum kann man für Datenstrukturen auch ein entsprechendes
XML-Format definieren:

JSON:
1
{
2
  "farbe"  : "rot",
3
  "punkte" : [{ "x": 0.0, "y": 0.0 },
4
              { "x": 3.5, "y": 0.0 },
5
              { "x": 3.5, "y": 4.5 },
6
              { "x": 0.0, "y": 4.5 }]
7
}

XML:
1
<objekt>
2
  <element name="farbe">
3
    <string>rot</string>
4
  </element>
5
  <element name="punkte">
6
    <liste>
7
      <objekt>
8
        <element name="x"><zahl>0.0></zahl></element>
9
        <element name="y"><zahl>0.0></zahl></element>
10
      </objekt>
11
      <objekt>
12
        <element name="x"><zahl>3.5></zahl></element>
13
        <element name="y"><zahl>0.0></zahl></element>
14
      </objekt>
15
      <objekt>
16
        <element name="x"><zahl>3.5></zahl></element>
17
        <element name="y"><zahl>4.5></zahl></element>
18
      </objekt>
19
      <objekt>
20
        <element name="x"><zahl>0.0></zahl></element>
21
        <element name="y"><zahl>4.5></zahl></element>
22
      </objekt>
23
    </liste>
24
  </element>
25
</objekt>

Die JSON-Syntax sieht nicht viel anders aus als die Literale in den
meisten Programmiersprachen (Python, C99 usw.). Das ist auch nicht
weiter verwunderlich, da es sich dabei um Javascript-Syntax handelt. Die
Typinformation, die in JSON durch die Syntax der Literale gegeben ist,
muss in XML durch entsprechende Tags mitgeliefert werden, was die
Darstellung gewaltig aufbläst und unübersichtlich macht.

Die Beispiele zeigen: Obwohl beide Sprachen mächtig genug sind, um
beliebige Informationen darzustellen, hat jede von ihnen ihre eigene
Domäne, in der sie ihre Stärken ausspielen kann.

Washington I. schrieb:
> Anwendung von µSON:
> -Logdateien
> -Konfiguration
> -Messen und Steuern

Da es in diesen Anwendungen primär um Datenstrukturen geht, ist dafür
JSON in meinen Augen die bessere Wahl.

von Lukas K. (carrotindustries)


Lesenswert?

Washington I. schrieb:
> Was nun fehlt: ein Standard als Pendant für mikrocontroller, ich nenne
> es mal "µSON".

Wenn es dir nur um JSON in Binär geht, bittesehr: http://bsonspec.org/#/

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Die ganzen Beispiele wie schön und klar doch XML ist, haben nur einen 
klitzekleinen Nachteil: Man begegnet so schönen XML's "da draußen" 
leider fast nie...
1
<switch value="on"></switch>
schön wärs, in der Praxis ist das sowas wie
1
<attrlist>
2
<attribute>
3
<name>switch</name>
4
<type>string</type>
5
<value>on</value>
6
</attribute>
7
</attrlist>

Besonders meine Freunde aus Redmond liebe ich da heiß für ihre 
Serialisierung....

Und damit komme ich auch zu meinem meiner Hauptkritikpunkte an XML: aus 
dem Format geht nicht hervor, ob ein Element einfach oder mehrfach 
vorkommen kann. Und genau dieses Problem löst z.B. JSON sehr schön, 
indem es die eckige Klammer verwendet, um eine Liste einzuleiten.

Ja, XML hat auch mein Leben vereinfacht. CSV lässt mich regelmäßig 
erschaudern (Umlaute, mehrzeiliger Feldinhalt, Texterkennung, ...)

Andererseits hätte man halt manches in XML besser und einfacher (und mit 
weniger Overhead) machen können.

Übrigens hab ich sowas wie JSON schon verwendet, als es noch kein JSON 
gab: meine Aufgabe war eine Datenübernahme komplexer Produktstrukturen 
aus einem PDM-System in ein anderes. Mehrere Millionen Datensätze, 
komplexe Strukturen, jedes Element in seiner eigenen XML-Datei, 
Querverweise zwischen den XML-Dateien. In punkto Rechenzeit 
(XML-Parser!) und Speicherplatz (nicht zuletzt die vergleichsweise 
riesigen Dateien wegen XML-Overhead) praktisch nicht mehr handhabbar. 
Umwandeln aller XML-Files in etwas JSON-ähnliches (eigentlich eine 
Perl-Datenstruktur bestehend aus Hashes und Arrays, rausgeschrieben mit 
Data::Dumper, eingelesen mit eval() ) => Speicherplatz/100, 
Rechenzeit/300

von A. W. (uracolix)


Lesenswert?

>Wenn es dir nur um JSON in Binär geht, bittesehr: http://bsonspec.org/#/

BSON ist auf den ersten Blick recht sympathisch.

PRO: Die BSON Syntax geht auf ein paar Zeilen und ein En-/Decoder sind 
einfach auf einem µC zu schreiben.

CONS: BSON ist
 - redundant (viele Längenelemente, gut zum Syncen auf Streams)
 - die Längen-Elemente sind auf große Datenmengen ausgelegt
 - es gibt keine  byte- und unsigned int Datentypen als Werte.

Beispiel von der Webseite:
1
{"hello": "world"}
2
"\x16\x00\x00\x00\x02hello\x00\x06\x00\x00\x00world\x00\x00"
3
 |---------------|------------|--------------:---------|---|
4
   total  len        key          strlen         str    end

Durch den Overhead ist BSON nicht perfekt fuer den µC Einsatz geeignet.

Man koennte die Definitionen etwas Abruesten, sozusagen ein BSON8 
definieren und das Ergebnis versuchen bei BSON mit einzubringen.

PS: Von einem µ im Protokoll-Namen würde ich nach 5 Jahren mit µracoli 
eher abraten ;-)

von Jürgen (jliegner)


Lesenswert?

Es gibt einen Punkt den man bei der Betrachtung nicht vergessen sollte. 
Ein Grund für den "Siegeszug" von JSON ist, dass es nativ von allen 
Webbrowsern unterstützt wird. Das bedeutet, wenn ich selbst auf einem 
kleinen µC einen Webserver betreibe und die statische GUI (html,js) von 
den Daten trenne und die Daten dann per AJAX anfordere, dann ist JSON 
das Format der Wahl. Klein, leicht und gut zu verstehen auf beiden 
Seiten. XML und CSV oder ein spezielles Format erfordern im Browser 
immer erst einen Parser. Das entfällt für JSON als Transportschicht 
komplett. Das haben auch einige schon in ihren Webservices erkannt. JSON 
ist da deutlich resourcenschonender als XML.
Leider interessiert das heute aber irgendwie kaum noch einen. Egeal wie 
groß die Lib's sind die man verwendet. Hauptsache es geht irgendwie.

von Jürgen (jliegner)


Lesenswert?

Jörg Wunsch schrieb:
> Ein XML-Parser ist doch genauso einfach nur ein Werkzeug wie ein
> Compiler oder eine Standardbilbiohtek.

Wobei du dir gern mal ansehen solltest, wie groß die Implementierungen 
von JSON- und XML-Parsern sind und welchen Speicherbedarf sie zur 
Laufzeit haben.

Um beim Stromvergleich zu bleiben. Das ist so als ob du in deinem Haus 
nur 32A Kraftsteckdosen verbaust weil es ja so schön einheitlich ist....
Schließlich ist es ja nur Strom und mein Küchenradio geht damit über 
einen "kleinen" Adapter doch auch.

Auch einfache Werkzeuge sollte man immer mal wieder darauf untersuchen 
ob sie auch wirklich zur Aufgabe passen oder nur geeignet sind.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Jürgen Liegner schrieb:
> Wobei du dir gern mal ansehen solltest, wie groß die Implementierungen
> von JSON- und XML-Parsern sind und welchen Speicherbedarf sie zur
> Laufzeit haben.

Du hast das falsch verstanden: das sollte in keiner Weise ein
Plödoyer sein, dass man grundsätzlich statt JSON XML benutzt.

Jedes Werkzeug für seine Aufgabe.

von Uhu U. (uhu)


Lesenswert?

Michael Reinelt schrieb:
> Und damit komme ich auch zu meinem meiner Hauptkritikpunkte an XML: aus
> dem Format geht nicht hervor, ob ein Element einfach oder mehrfach
> vorkommen kann.

Da liegst du falsch.
1
<xs:sequence>
2
  <xs:element ref="beobachtung" minOccurs="0" maxOccurs="unbounded"/>
3
  <xs:element ref="brutplatz" minOccurs="0" maxOccurs="unbounded"/>
4
</xs:sequence>

Für maxOccurs kann auch eine Zahl angegeben werden.

von Uhu U. (uhu)


Lesenswert?

Jürgen Liegner schrieb:
> Ein Grund für den "Siegeszug" von JSON ist, dass es nativ von allen
> Webbrowsern unterstützt wird.

Das ist m.A. der einzige wirklich handfeste Grund, der für JSON spricht.

> JSON ist da deutlich resourcenschonender als XML.

Nur bedingt: Wenn die Daten zum Transport komprimiert werden, dann ist 
es ziemlich egal, ob JSON, oder xml zum Zug kommt.

von Dennis S. (dspo)


Lesenswert?

Bei kleinen Datenmengen und wenn ein einfacher Reload der Webseite zur 
Darstellung aktueller Daten ausreicht ist es mit Abstand das Einfachste, 
eine HTML Webseite komplett im Mikrocontroller zu erstellen/vorzuhalten 
und dann auf Anfrage auszuliefern. Benötigte Grafiken usw. können von 
anderem Webspace verlinkt werden.
Nicht daß noch jemand auf die Idee kommt man müsste zum Zugriff auf den 
heimischen Controller Komplexität und Lernaufwand mit Ajax, Json & Co 
unnötig aufblasen.

von Jürgen (jliegner)


Lesenswert?

Dennis S. schrieb:
> Nicht daß noch jemand auf die Idee kommt man müsste zum Zugriff auf den
> heimischen Controller Komplexität und Lernaufwand mit Ajax, Json & Co
> unnötig aufblasen.

Das sehe ich anders. Ajax im Browser ist in max. 20 Zeilen kodiert. Der 
µC braucht sich nur noch um die relevanten Daten zu kümmer. Alles was 
statisch ist kann durchaus von anderen Orten kommen. Es ist aber auf der 
µC Seite wesentlich entspannter ausschließlich Daten zu liefern und 
nicht dynamisch  html-Seiten zu Parsen und darin Ersetzungen zu machen. 
Das ist aber der übliche Weg wenn die Seiten nicht so trivial sind, dass 
auch die html-Tags durch den µC zusammengebaut werden. Ich verweise nur 
mal auf das httpd-Beispiel von µIP. Schön ist was anderes.

Ab wann etwas aufgeblasen ist oder nicht entscheidet die Komplexität der 
Anwendung. Wenn die Html-Seite nur aus der Anzeige der Aussentemperatur 
besteht gebe ich dir recht.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Falk Brunner schrieb:
> Wobei ich nicht den großen Vorteil bei dem Format erkenne.
> Ist doch nix großartig anderes als CSV.

CSV ist flach und Zeilen/Spaletn-orientiert, JSON ermöglicht es 
Objektstrukturen und Hierarchien abzubilden, es gibt feste Datentypen 
(String, Zahl, Boolean, Array, Hash).

Ein µJSON macht eigentlich keinen Sinn, JSOn ist schon dermaßen minimal, 
und wenn es auf die letzen paar bits und bytes ankommt hat man 
vermutlich für die Aufgabe den falschen Controller gewählt.

Zu dem XML Vergleich: In meinen Augen Blödsinn. Und wenn es 100x in 
Wikipedia steht, sind das weder zwei vergleichbare noch austauschbare 
Formate, und jedes hat seine Daseinsberechtigung und seinen 
Einsatzzweck.

Und genauso wie bei Programmiersprachen gibt es Leute die das passende 
Werkzeug nutzen und welche die nur den Hammer kennen und deshalb alles 
wie ein Nagel aussieht.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Ich finde es auch immer wieder lästig, wenn ich strukturierte Daten in 
XML vorgesetzt bekomme. XML ist eine Dokumentenauszeichnungssprache. Es 
gibt in XML keinen generischen Weg, grundlegende Datenstrukturen 
(Listen, Hashes) abzubilden, und jeder der es dazu missbraucht kocht 
deshalb sein eigenes Süppchen. Glücklicherweise tritt zumindest bei 
Web-APIs inzwischen JSON den Siegeszug an.

Es gab übrigens schon vor JSON ein mittelmäßig verbreitetes Format für 
strukturierte Daten: YAML. Ist sogar noch schöner lesbar.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Uhu Uhuhu schrieb:
> Michael Reinelt schrieb:
>> Und damit komme ich auch zu meinem meiner Hauptkritikpunkte an XML: aus
>> dem Format geht nicht hervor, ob ein Element einfach oder mehrfach
>> vorkommen kann.
>
> Da liegst du falsch.
>
>
1
> <xs:sequence>
2
>   <xs:element ref="beobachtung" minOccurs="0" maxOccurs="unbounded"/>
3
>   <xs:element ref="brutplatz" minOccurs="0" maxOccurs="unbounded"/>
4
> </xs:sequence>
5
>
>
> Für maxOccurs kann auch eine Zahl angegeben werden.

Ja sehr super. In der Praxis hast du die halbe Zeit kein Schema, die 
andere halbe zeit stimmt es nicht oder ist veraltet, und außerdem: XML 
ist ja noch nicht aufgeblasen genug, wir müssen die CPU ja unbedingt 
auch noch mit einem Schema-Parser beschäftigen...

Das mag alles schön in der Theorie sein, die Praxis da draußen sieht 
leider anders aus. Vor allem seit jeder Furz in XML kodiert wird, weil 
es ja so schön hip ist, und außerdem braucht man ja nur 
object.serialize() aufrufen...

deswegen mag ich JSON: "reduced to the max"

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Michael Reinelt schrieb:
> In der Praxis hast du die halbe Zeit kein Schema, die andere halbe zeit
> stimmt es nicht oder ist veraltet

Das Schema braucht man ja normalerweise auch nur, um die Software
selbst zu validieren, die das XML erzeugt.  Wenn man es benutzen will,
um jedes einzelne Dokument erstmal zu validieren, obwohl man dem
Generator des Dokuments eigentlich vertraut, dann ist da irgendwas
grundlegend faul.

Wenn das Schema nicht stimmt oder veraltet ist, ist noch mehr faul.
Wenn sich Generator und Konsument nicht über die Syntax und Semantik
der ausgetauschten Daten einig sind, kannst du XML genauso vergessen
wie JSON oder irgendein völlig proprietäres Binärformat.

von Sven P. (Gast)


Lesenswert?

Also wenn ich nur einfach und kompakt eine Datenmenge unterbringen 
möchte, die in irgendeiner Form strukturiert ist, dann würde ich auf dem 
Mikrocontroller vermutlich sogar ASCII-Steuerzeichen verwenden.

Mit denen lässt sich schon recht elegant hantieren. Unter der Annahme 
natürlich, dass am anderen Ende wieder ein Programm diese Daten 
zerpflückt und dass ich möglichst wenig Redundanz haben möchte. Denn 
genau diese bläht XML und JSON auf: Wenn ich ohnehin ein festes 
Datensatzformat ablege, brauche ich nicht in jedem Datensatz noch die 
Feldbezeichner mitzuschleppen.

von Dennis S. (dspo)


Lesenswert?

Jürgen Liegner schrieb:
> Wenn die Html-Seite nur aus der Anzeige der Aussentemperatur
> besteht gebe ich dir recht.

Was mit einem Wert einfach ist wird mit 20 kaum komplizierter.
Es braucht nur den Mikrocontroller, der auf eine entsprechende GET 
Anfrage eines Webbrowsers sein bischen vorbereiteten HTML-Code sendet; 
noch nicht einmal irgendeine eigene Webseite/Webspace ist dafür nötig.

Wenn ich die Sache mit Ajax/Json recht begriffen habe wird das doch erst 
interessant bei (und/oder)

-sehr vielen Daten, die
-programmsprachlich verarbeitet,
-grafisch anspruchsvoll aufbereitet,
-in Echtzeit (ohne Reload) angezeigt,
-mit einer Datenbank verknüpft werden sollen.

!?

von Jürgen (jliegner)


Lesenswert?

Dennis S. schrieb:
> Wenn ich die Sache mit Ajax/Json recht begriffen habe wird das doch erst
> interessant bei (und/oder)
>
> -sehr vielen Daten, die
> -programmsprachlich verarbeitet,
> -grafisch anspruchsvoll aufbereitet,
> -in Echtzeit (ohne Reload) angezeigt,
> -mit einer Datenbank verknüpft werden sollen.

Mal angenommen du möchtest ohne viel Aufwand den Verlauf über die Zeit 
in einem Diagramm darstellen. Das geht heute mit html5 und dem 
Canvasobject ohne dass wie früher Bilder erzeugt werden. Der µC würde 
z.B. alle 2min einen Datensatz per Ajax abliefern und bei Bedarf eine 
auf SD-Karte abgelegt Historie über einen bestimmten Zeitraum. Bei 10 
Werten geschätzte 200 Byte/Datensatz.

Alles andere wird dann vom JS im Browser direkt erzeugt.
Damit ist kein µC überfordert der Tcp/Ip kann. Klar ist das mit einem 
gewissen Aufwand verbunden, eröffnet aber viele weiter Möglichkeiten.

Noch ein Aspekt:
Sobald html-Tags im Controller zusammengebaut werden, steigt der Aufwand 
für Firmawareupdates auf dem Controller überproportional, da nirgends 
soviel Änderungen anfallen wie bei der GUI. Eine reine 
Datenschnittstelle hat diesen Änderungsbedarf nicht.

Ein eigener Webspace ist hier auch nicht nötig. Nur möglich. Den 
statischen Teil lädt der Browser maximal 1 mal vom Controller und nicht 
bei jeder Aktualisierung aufs neue. Das kann schon einen gewaltigen 
Unterschied ausmachen. Auch während der Entwicklung können die üblichen 
komfortabelen Werkzeuge auf dem PC benutzt werden, der Hauptteil der GUI 
Entwicklung passiert halt auf dem PC und nicht im Controller.

Mit Datenbanken hat das absolut nichts zu tun.

Ich wollte damit auch nur sagen, dass es sich lohnt hin und wieder über 
den Tellerrand zu gucken.

Insbesondere für Messwerte kann ein JSON-Stream extrem einfach auf dem 
µC erzeugt werden, da dass Format ziemlich trivial ist. JS,Php,Java 
wandeln das dann mit einem einzigen Funktionsaufruf in ihre interen 
Datenrepräsentation. Da lohnt es sich nicht sich etwas auszudenken und 
dann noch einen Parser dafür zu schreiben.

von Dennis S. (dspo)


Lesenswert?

Ja, das leuchtet durchaus ein- wenn die Ansprüche größer werden und/oder 
wir hier von mehr als etwas Hobbyprogrammierung reden scheint die 
professionelle Lösung via Ajax/Json das flexible Mittel der Wahl. Wenn 
die schnelle Realisierung im Vordergrund steht sind natürlich aber auch 
(noch nicht) vorhandene Kentnisse /Lernaufwand von Bedeutung... Nachdem 
(m)eine kleine 20 Messwert-HTML Seite in 0,nichts aus dem Controller 
geladen ist (steht fertig im RAM, der Controller setzt nur aktuelle 
Strings in die vorgesehenen Lücken) bleib ich zwar erst mal dabei. Zumal 
ein paar geplante, JS vorcodierte, simple Canvas-History-Diagramme mehr 
das Kraut sicher auch nicht fett machen dürften. Aber die zusätzliche 
Möglichkeit der Json Datenausgabe werde ich nun auch einplanen!

von Max H. (max_h39)


Lesenswert?

Unabhängig von der Notwendigkeit einer solchen Implementierung wollte 
ich einmal auf einen bereits sehr minimalistischen json-parser 
hinweißen, mitdem sich standard json code bereits relativ 
resourcenschonend verarbeiten lässt:

http://zserge.bitbucket.org/jsmn.html

Frohes diskutieren noch ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.