Seite 2 von 4

Re: JSON Encoder und Decoder

Verfasst: 01.05.2011 13:30
von PMV
Nero hat geschrieben:Ne ich nutze das immer als normalen JS code also für sowas

Code: Alles auswählen

var myObj = { test: function() { ..... }};
hab es bisher nie für reine Daten gebraucht (bis jetzt :lol: )
Dann hast du noch nie JSON gebraucht. Das sind wirklich nur die Daten
innerhalb eines JS-Objektes in einer bestimmten Notation. Nützlich
um Daten zu verschicken oder zu speichern, ohne den Overhead
bei XML oder den Zeitaufwand für ein eigenes Format.

MFG PMV

Re: JSON Encoder und Decoder

Verfasst: 03.05.2011 23:53
von PMV
+ bugfix: Wenn JSON_decode() auf eine Zahl stieß, auf die eine }-Klammer folgte, wurde die Zahl nicht erkannt und #False zurück gegeben
+ verbessert: ein paar lokale variablen waren nicht deklariert
Da hab ich doch tatsächlich einen Fehler gefunden. /:->

Re: JSON Encoder und Decoder

Verfasst: 05.05.2011 17:54
von Nero
Dann hast du noch nie JSON gebraucht
Stimmt wohl :lol:
Da hab ich doch tatsächlich einen Fehler gefunden.
Hast trotzdem super arbeit gemacht!

Hab meinen Parser noch mal neu geschrieben und die rekursion rausgefeuert.
Aber mit deinem kann er nicht mithalten <)

Re: JSON Encoder und Decoder

Verfasst: 16.06.2011 22:15
von SebastianJu2
@PMV

Danke für den Code... funktioniert super...

Ich habe Zeile 596 der pbi aber abgeändert auf:

Code: Alles auswählen

  If Size > 0
    Dim *obj\a(Size)
  EndIf
weil das JsonRPC-Protokoll scheinbar ab und zu params ohne Inhalt zu erwarten scheint. Also

"params" : [ ]

Mit

Code: Alles auswählen

JSON_dimArray(@AskJson\o("params"), 0)
geht das dann... Ohne die Änderung kommt mit 0 eine Fehlermeldung und mit 1 würde in den eckigen Klammern eine 0 stehen was in meinem Fall einen Fehler im Protokoll verursacht hat.

Keine Ahnung ob man die Änderung so stehen lassen kann oder nicht...

Re: JSON Encoder und Decoder

Verfasst: 18.06.2011 01:37
von PMV
Oh, das muss natürlich funktionieren, in der JSON-Spezifikation sind
leere Arrays (und Objekte) auch drin. Leider hab ich das irgend wie
komplett vergessen ... also deine Änderung wäre eine Möglichkeit,
aber denk dran, das wenn du "Dim" weg lässt und dann die Prozedur
für bereits benutzte Arrays verwendest, bleiben alle vorher dimensionierten
Elemente bestehen.

Ich hab aber so bald keine Zeit um mir hier drüber mal Gedanken zu
machen. Insbesondere weil es sich auch eigentlich erst dann lohnt,
wenn ich dann das Resetten von tatsächlich erstellen Objekte
mal einbaue und ausführlich teste. Aber nicht so bald ...

MFG PMV

Re: JSON Encoder und Decoder

Verfasst: 15.10.2011 19:39
von PMV
+ bugfix: leere Arrays "[]" sind nun möglich
+ bugfix: Backslashes in Strings führt nun nicht mehr zu Abstürzen
+ geändert: JSON_newObject() ist nur noch zum initialisieren eines leeren Json-Objekts
+ geändert: JSON_free() ist nun ein Macro
+ hinzugefügt: Macro JSON_newPair() (früheren JSON_newObject(), siehe Beispiel)
+ hinzugefügt: JSON_clear()
+ verbessert: JSON_dimArray() und JSON_newObject() resetten nun das übergebene Objekt


JSON_dimArray() und JSON_newObject() rufen nun bei bereits benutzten
Strukturen JSON_clear() auf. Es wurden aber keine umfangreichen Tests
durchgeführt. Ich hab leider keine Zeit und bisher keinen Nutzen für JSON,
sorry. Bitte fleißig testen und evt. Probleme melden. :)


Wichtig:
Information für alle, die das alte JSON_newObject() (bis 03.05.2011)
nutzen und auf die neuste Version (ab 15.10.2011) aktualisieren wollen.
Die Änderung ist vorallem kosmetischer Natur, damit der resultierende
Code lesbarer ist. JSON_newObject() hat tatsächlich in erster Linie
Name/Wert-Paare erstellt. Lediglich der erste Aufruf für ein Objekt hat
dieses auch initialisiert. Wer auf diese Funktion aufgebaut hat, kann
einfach alle Quellcodes durchlaufen lassen und JSON_newObject() mit
JSON_newPair() austauschen. JSON_newPair() wird in Zeile 601
definiert. Der dort auskommentierete aufruf "Zeile 602: ;JSON_newObject()"
muss einkommentiert werden. Nun macht JSON_newPair() genau
das gleiche, wie vorher JSON_newObject(). Wer seinen Code lieber
lesbarer und noch nicht so viele Zeilen Code hat, der beachte das
Beispiel, wie die zwei Befehle nun zu nutzen sind.


(Beispiel zu JSON_newObject() und JSON_newPair())

Code: Alles auswählen

#JSON_UseObjectPointer = #True
IncludeFile "JSON_Parser.pbi"

Define *myJSON.jsonObj = JSON_create()
JSON_newObject(*myJSON)
JSON_newPair(*myJSON, "myString")
*myJSON\o("myString")\s = "text"
JSON_newPair(*myJSON, "myObject")

JSON_newObject(*myJSON\o("myObject"))
JSON_newPair(*myJSON\o("myObject"),  "value")
             *myJSON\o("myObject")\o("value")\i = 49
JSON_newPair(*myJSON\o("myObject"),  "nullValue")
             *myJSON\o("myObject")\o("nullValue")\type = #JSON_Type_Null
             
JSON_Debug(*myJSON, "")
JSON_free(*myJSON)

Re: JSON Encoder und Decoder

Verfasst: 17.10.2011 09:08
von Kiffi
Danke! :allright: Werde mich in Zukunft mal ein wenig intensiver
mit JSON befassen. Da kommt mir Dein Code grade recht.

Grüße ... Kiffi

Re: JSON Encoder und Decoder

Verfasst: 05.04.2012 21:45
von PMV
+ bugfix: Wenn JSON_decode() auf eine Zahl stieß, auf die eine ]-Klammer folgte, wurde die Zahl nicht erkannt und #False zurück gegeben


Wenn man bedenkt, das ich das gleiche auch schon mit der geschweiften
Klammer gefixed hab ... oh weh. :oops:

Re: JSON Encoder und Decoder

Verfasst: 14.11.2012 00:18
von PMV
update 17.07.2012
+ hinzugefügt: JSON_freeStringBuffer() für Fälle bei denen JSON_encode() sehr große Strings verarbeitet hat und anschließend kein weiteres JSON verarbeitet muss.
+ hinzugefügt: zusätzlicher Parameter "initialize" für JSON_clear(), kann auf #False gesetzt werden damit das Objekt nicht automatisch wieder initialisiert wird (früheres Verhalten).
+ verbessert: Speicherverwaltung für JSON_encode() eingebaut, was diesen um ein vielfaches schneller macht
+ verbessert: JSON_clear() ruft nun am Ende automatisch InitializeStructure() auf, damit das übergebene Objekt wieder nutzbar ist.


Habs leider ganz vergessen und nu isses auch schon so lang her.
Kann also nicht mehr sagen wie viel schneller das nun genau ist.
Um ein vielfaches wars aber glaub schon, also JSON_encode()
ist nun auch für große Mengen geeignet. :)

MFG PMV

Re: JSON Encoder und Decoder

Verfasst: 14.11.2012 01:41
von Kiffi
Jetzt schon mal ein dickes Danke für Deine tolle Arbeit! :allright:

Schaue ich mir morgen mal in Ruhe an...

Grüße ... Kiffi