Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
111
Task/JSON/M2000-Interpreter/json.m2000
Normal file
111
Task/JSON/M2000-Interpreter/json.m2000
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
MODULE A {
|
||||
\\ Process data in json format
|
||||
|
||||
\\ We can load from external file with Inline "libName"
|
||||
\\ or multiple files Inline "file1" && "file2"
|
||||
\\ but here we have the library in a module
|
||||
Inline Code Lib1
|
||||
\\ So now we make a Parser object (a group type in M2000)
|
||||
Parser=ParserClass()
|
||||
\\ We can display any function, module that is public and known list
|
||||
Modules ?
|
||||
\\ And this are all known variables (or and objects)
|
||||
List !
|
||||
Document json$
|
||||
\\ We can load from file
|
||||
\\ Load.Doc json$, "alfa.json"
|
||||
json$={{
|
||||
"alfa":-0.11221e+12,
|
||||
"array" : [
|
||||
-0.67,
|
||||
"alfa1",
|
||||
[
|
||||
10,
|
||||
20
|
||||
],
|
||||
"beta1",
|
||||
1.21e12,
|
||||
21.12145,
|
||||
"ok"
|
||||
],
|
||||
"delta": false, "epsilon" : true, "Null Value" : null
|
||||
}}
|
||||
Save.Doc json$, "json2.json" \\ by default in Utf-8 with BOM
|
||||
\\ just show multiline text
|
||||
\\ Report display lines and stop after 3/4 of console height lines
|
||||
\\ just press a key or click mouse button
|
||||
Report json$
|
||||
\\ so now we get text to a new object
|
||||
alfa=Parser.Eval(json$)
|
||||
\\ check it
|
||||
Print Type$(alfa) ' it is a group
|
||||
Print "alfa.type$=";alfa.type$ \\ this is a read only property
|
||||
|
||||
Report "as one line"
|
||||
Report Parser.Ser$(alfa, 0)
|
||||
|
||||
Report "as multiline"
|
||||
Report Parser.Ser$(alfa, 1)
|
||||
|
||||
Print "Using Print"
|
||||
Print Parser.ReadAnyString$(alfa)
|
||||
|
||||
Print "Value for alfa, id alfa"
|
||||
Print Parser.ReadAnyString$(alfa,"alfa")
|
||||
Report "as multiline"
|
||||
Report Parser.Ser$(Parser.Eval(Parser.ReadAnyString$(alfa,"array", 2)), 1)
|
||||
\\ We get a copy of an array as a Group (a group which return an array)
|
||||
Alfa3=Parser.Eval(Parser.ReadAnyString$(alfa,"array", 2))
|
||||
\\ First value is for actual object, second value is a readonly property of this object
|
||||
Print type$(Alfa3), Alfa3.type$
|
||||
Dim B()
|
||||
\\ Now Alfa3 run Value part and pass a pointer of array
|
||||
\\ B() is an array and here take a pointer to Alfa3 array (as value of Alfa3)
|
||||
B()=Alfa3
|
||||
\\ each() make an iterator for B()
|
||||
N=each(B())
|
||||
While N {
|
||||
\\ Using B() we get values always. but if we have "object" or "array" then Print prints items **
|
||||
Print B(N^)
|
||||
}
|
||||
\\ Print show here nothing because if value is object then "print" just leave a column and continue to next one
|
||||
Print B()
|
||||
\\ we have to use Group() to get group not value of group (if any).
|
||||
\\ Group() works for "named" group, not for stored in an array or an inventory or a stack
|
||||
Print Parser.StringValue$(Group(Alfa3), 0)
|
||||
Print Parser.StringValue$(Group(Alfa3), 1)
|
||||
\\ Now we want to pass a new value
|
||||
\\ Interpreter want to match type of expression from left side to right side
|
||||
\\ Because Parser.StringValue$ is actual a Group (As property),
|
||||
\\ we have a second linked name: Parser.StringValue
|
||||
\\ we have to use Parser.StringValue()
|
||||
\\ and all values must be groups, as those provided by Parser
|
||||
Parser.StringValue(Group(Alfa3), 1)=Parser.Numeric(1234)
|
||||
Print Parser.StringValue$(Group(Alfa3), 1)
|
||||
Print Parser.StringValue$(Group(Alfa), "array", 2, 0)
|
||||
\\ we have to use Parser.StringValue$()
|
||||
Parser.StringValue$(Group(Alfa), "array", 2, 0)=Parser.JString$("Changed to String")
|
||||
Print Parser.StringValue$(Group(Alfa), "array", 2,0)
|
||||
Try ok {
|
||||
Print Parser.StringValue$(Group(Alfa), "array", 2)
|
||||
}
|
||||
If Error or not ok Then Print Error$
|
||||
Parser.StringValue.Add = True
|
||||
Parser.StringValue$(Group(Alfa), "array", 2, 10)=Parser.JString$("Changed to String 2")
|
||||
Parser.StringValue(Group(Alfa), "Last value")=Parser.Boolean(true)
|
||||
Report "as multiline"
|
||||
Report Parser.Ser$(alfa3, 1)
|
||||
Report Parser.Ser$(alfa, 1)
|
||||
Parser.StringValue.Add = False
|
||||
Parser.StringValue.Del = True
|
||||
Parser.StringValue(Group(Alfa), "array", 0)=Parser.Null()
|
||||
Parser.StringValue(Group(Alfa), "delta")=Parser.Null()
|
||||
Parser.StringValue.Del = False
|
||||
For Parser {
|
||||
.StringValue(Group(Alfa), "array", 1,5)=.Arr((.Numeric(10), .Jstring$("ok 20"), .Boolean(true)))
|
||||
}
|
||||
Report Parser.Ser$(alfa, 1)
|
||||
|
||||
}
|
||||
// call A
|
||||
A
|
||||
Loading…
Add table
Add a link
Reference in a new issue