This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
vba:cast:json [24.10.2016 09:01:43] yaslaw |
vba:cast:json [16.01.2020 08:44:37] (current) yaslaw |
||
---|---|---|---|
Line 1: | Line 1: | ||
<const> | <const> | ||
- | version=2.0.5 | + | version=2.9.1 |
- | vdate=08.02.2016 | + | vdate=16.01.2020 |
fname=lib_json.bas | fname=lib_json.bas | ||
ns=%NAMESPACE% | ns=%NAMESPACE% | ||
Line 12: | Line 12: | ||
==Version %%version%% %%vdate%%== | ==Version %%version%% %%vdate%%== | ||
- | <WRAP center round download> | + | <WRAP round download 50%> |
- | {{..%%fname%%|Download %%fname%% (V-%%version%%)}} | + | ><fc #808080>//Das Modul hat versteckte Attribute. Damit diese aktiv übernommen werden reicht es nicht aus, den Code in ein neues Modul zu kopieren. Man muss das Modul aus der Datei nach VBA importieren.//</fc> |
- | </WRAP> | + | >{{popup>:vba:vba_importfile.png|Bild zum Import}} |
+ | |||
+ | {{%%fname%%|Download %%fname%% (V-%%version%%)}}</WRAP> | ||
Für mehrere Projekte brauche ich JSON. Ich arbeitete bisher mit [[ http://www.ediy.co.nz/vbjson-json-parser-library-in-vb6-xidc55680.html|VB-JSON]]. Aber irgendwie störte es mich, dafür jeweils 2 Klassen und ein Modul zu kopieren. | Für mehrere Projekte brauche ich JSON. Ich arbeitete bisher mit [[ http://www.ediy.co.nz/vbjson-json-parser-library-in-vb6-xidc55680.html|VB-JSON]]. Aber irgendwie störte es mich, dafür jeweils 2 Klassen und ein Modul zu kopieren. | ||
Line 62: | Line 64: | ||
jqmInternalArrayPrefix = 2 ^ 4 'Der JSON-String wird mit eigenen Prefixen bei Array und Collection mitgeliefert | jqmInternalArrayPrefix = 2 ^ 4 'Der JSON-String wird mit eigenen Prefixen bei Array und Collection mitgeliefert | ||
jqmReverseSolidusAsUnicode = 2 ^ 5 'Ein \ in einem String wird nicht als \\ sondern als Unicode gaparst | jqmReverseSolidusAsUnicode = 2 ^ 5 'Ein \ in einem String wird nicht als \\ sondern als Unicode gaparst | ||
+ | jqmNoErrorForWrongType = 2 ^ 6 'Wenn ein nicht parsbarer Wert kommt, den TypeName() ausgeben | ||
jqmDefault = jqmDoubleQuote | jqmDefault = jqmDoubleQuote | ||
End Enum</code> | End Enum</code> | ||
Line 227: | Line 230: | ||
) | ) | ||
</code> | </code> | ||
+ | |||
+ | === 5) Wenn der String kein JSON-String ist === | ||
+ | Wenn der übergeben String kein JSON-String ist, gibt es verschiedene Möglichkeiten | ||
+ | <code vb>'Standard: Es wird kein Objekt erstellt | ||
+ | print_r json2obj("abc") | ||
+ | <Empty> | ||
+ | |||
+ | 'String in ein Array parsen | ||
+ | print_r json2obj("abc", jrtSingle2List) | ||
+ | <Variant()> ( | ||
+ | [0] => <String> 'abc' | ||
+ | ) | ||
+ | |||
+ | 'String in ein Dictionary parsen | ||
+ | print_r json2obj("abc", jrtSingle2List + jrtDictionary) | ||
+ | <Dictionary> ( | ||
+ | [0] => <String> 'abc' | ||
+ | )</code> | ||
+ | |||
+ | === 6) Werte Nicht Casten === | ||
+ | Normalerweise werdend ie Werte in passende Typen umgewandelt | ||
+ | <code vb>print_r json2obj("[Null,True,12.3]") | ||
+ | <Variant()> ( | ||
+ | [0] => <Null> | ||
+ | [1] => <Boolean> True | ||
+ | [2] => <Double> 12.3 | ||
+ | )</code> | ||
+ | Mittels jrtNotCastValue kann dies aber auch unterbunden werden | ||
+ | <code vb>print_r json2obj("[Null,True,12.3]", jrtNotCastValue) | ||
+ | <Variant()> ( | ||
+ | [0] => <String> 'Null' | ||
+ | [1] => <String> 'True' | ||
+ | [2] => <String> '12.3' | ||
+ | )</code> | ||
+ | |||
+ | === 7) Leere Listen erstellen === | ||
+ | <code vb>print_r json2obj(null) | ||
+ | <Empty> | ||
+ | |||
+ | print_r json2obj(null,jrtEmptyList) | ||
+ | <Variant()> () | ||
+ | |||
+ | print_r json2obj(empty,jrtEmptyList) | ||
+ | <Variant()> () | ||
+ | |||
+ | print_r json2obj("[1]",jrtEmptyList) | ||
+ | <Variant()> ( | ||
+ | [0] => <Byte> 1 | ||
+ | )</code> | ||
===== Code ===== | ===== Code ===== | ||
<WRAP center round download> | <WRAP center round download> | ||
- | {{..%%fname%%|Download %%fname%% (V-%%version%%)}} | + | {{%%fname%%|Download %%fname%% (V-%%version%%)}} |
</WRAP> | </WRAP> |