dson.go provides encoding, decoding, marshaling, unmarshaling, and verification of the DSON (Doge Serialized Object Notation) as defined here.
go get muzzammil.xyz/dsongoDSON is built on two structures:
-
A collection of key/value pairs. In various languages, this is realized as an object, record, struct, dictionary, hash table, keyed list, or associative array.
-
An ordered list of values. In most languages, this is realized as an array, vector, list, or sequence.
A key is a string in double quotes.
A value can be a string in double quotes, or a number, or yes or no or empty, or an object or an array. These structures can be nested.
such
"foo" is "bar"
wow
is equivalent to this in JSON:
{
"foo": "bar"
}A string is a sequence of zero or more Unicode characters, wrapped in double quotes, using backslash escapes.
A number is very much like a C or Java number, except it is presented in the dog-friendly octal base.
An object begins with such and ends with wow. Each key is followed by is and the key/value pairs are separated by , (comma) or . (dot) or ! or ?.
such
"foo" is "bar",
"number" is 42!
"alive" is yes
wow
is equivalent to this in JSON:
{
"foo": "bar",
"number": 34,
"alive": true
}An array begins with so and ends with many. Values are separated by and or also.
such
"ID" is 1!
"Name" is "Reds".
"Colors" is so
"Crimson" and "Red" and "Ruby" also "Maroon"
many
wow
is equivalent to this in JSON:
{
"id": 1,
"Name": "Reds",
"Colors": ["Crimson", "Red", "Ruby", "Maroon"]
}import (
"fmt"
"muzzammil.xyz/dsongo"
)func main() {
d := dson.Encode(`{"foo":"bar"}`)
fmt.Println(d) // such "foo" is "bar" wow
}func main() {
j := dson.Decode(`such "foo" is "bar" wow`)
fmt.Println(j) // {"foo":"bar"}
}func main() {
if dson.Valid(`such "foo" is "bar" wow`) {
fmt.Println("Valid DSON")
} else {
fmt.Println("Invalid DSON")
}
}func main() {
type ColorGroup struct {
ID int
Name string
Colors []string
}
RedGroup := ColorGroup{
ID: 1,
Name: "Reds",
Colors: []string{"Crimson", "Red", "Ruby", "Maroon"},
}
r, err := dson.Marshal(RedGroup)
if err == nil && dson.Valid(r) {
fmt.Println(r) // such "ID" is 1! "Name" is "Reds". "Colors" is so "Crimson" and "Red" and "Ruby" also "Maroon" many wow
}
}func main() {
d := `so such "Name" is "Platypus" and "Order" is "Monotremata" wow and such "Name" is "Quoll" and "Order" is "Dasyuromorphia" wow many`
if !dson.Valid(d) {
fmt.Println("DSON is not valid")
return
}
type Animal struct {
Name string
Order string
}
var animals []Animal
err := dson.Unmarshal(d, &animals)
if err == nil {
fmt.Printf("%+v", animals) // [{Name:Platypus Order:Monotremata} {Name:Quoll Order:Dasyuromorphia}]
}
}