Categorygithub.com/GoHJ7/djson/v2
modulepackage
2.0.10
Repository: https://github.com/gohj7/djson.git
Documentation: pkg.go.dev

# README

DJSON: Another JSON Library for who hates json.Unmarshal

DJSON v2

  • Compared to v1, the names of the functions are simple in v2.
  • Various useful functions for handling djson structure are included in DJSON v2.
  • github.com/lokks307/go-util will not serve DJSON v2 any more.

1. Basic Syntax for v1

1.1. New JSON

mJson := djson.New()

1.2. Assign values to JSON

// Array
mJson := djson.New()
mJson.Put(djson.Array{
    1,2,3,4,5,6,
})

fmt.Println(mJson.ToString()) // must be [1,2,3,4,5,6]
// Object
mJson := djson.New()
mJson.Put(djson.Object{
    "name":  "Hery Victor",
    "idade": 32,
})

fmt.Println(mJson.ToString()) // must be {"idade":32,"name":"Hery Victor"}

1.2. Assign Arrays to JSON

mJson := djson.New()
intArray := []int{1, 2, 3, 4, 5}
intVal := 3
strArray := []string{"yes", "this", "is right"}
strVal := "abc"

mJson.Put("int_array", djson.NewArray(intArray))
mJson.Put("int_val", intVal)
mJson.Put("str_array", djson.NewArray(strArray))
mJson.Put("str_val", strVal)

fmt.Println(mJson.ToString())
// must be like {"int_array":[1,2,3,4,5],"int_val":3,"str_array":["yes","this","is right"],"str_val":"abc"}

1.3. Assign table values to JSON

mJson := djson.New()
mJson.Put(
    djson.Array{
        djson.Object{
            "name":  "Ricardo Longa",
            "idade": 28,
            "skills": djson.Array{
                "Golang",
                "Android",
            },
        },
        djson.Object{
            "name":  "Hery Victor",
            "idade": 32,
            "skills": djson.Array{
                "Golang",
                "Java",
            },
        },
    },
)

fmt.Println(mJson.ToString()) // must be like [{"idade":28,"name":"Ricardo Longa","skills":["Golang","Android"]},{"idade":32,"name":"Hery Victor","skills":["Golang","Java"]}]

1.4. Append values to existing JSON

// Array
mJson := djson.New()

mJson.Put(djson.Array{
    1,2,3,4,5,6,
})

mJson.Put(djson.Array{
    7,8,9,
})

fmt.Println(mJson.ToString()) // must be [1,2,3,4,5,6,7,8,9]
// Object
mJson := djson.New()

mJson.Put(djson.Object{
        "idade": 28,
    })

mJson.Put(djson.Object{
    "name":"Hery Victor",
})

mJson.Put(djson.Object{
    "name":"Ricardo Longa", // overwrite existing value
})

fmt.Println(mJson.ToString()) // must be like {"idade":28,"name":"Ricardo Longa"}

1.5. Parse existing JSON string

jsonDoc := `[
    {
        "name":"Ricardo Longa",
        "idade":28,
        "skills":[
            "Golang","Android"
        ]
    },
    {
        "name":"Hery Victor",
        "idade":32,
        "skills":[
            "Golang",
            "Java"
        ]
    }
]`

mJson := djson.New().Parse(jsonDoc)

fmt.Println(mJson.ToString()) // must be like [{"idade":28,"name":"Ricardo Longa","skills":["Golang","Android"]},{"idade":32,"name":"Hery Victor","skills":["Golang","Java"]}]

1.6. Get values

jsonDoc := `[
    {
        "name":"Ricardo Longa",
        "idade":28,
        "skills":[
            "Golang","Android"
        ]
    }
]`

mJson := djson.New().Parse(jsonDoc)

// must be like [{"idade":28,"name":"Ricardo Longa","skills":["Golang","Android"]}]
fmt.Println(mJson.ToString()) 

// must be like {"idade":28,"name":"Ricardo Longa","skills":["Golang","Android"]}
fmt.Println(mJson.String(0)) 

aJson, _ := mJson.Object(0)

fmt.Println(aJson.Int("idade")) // 28
fmt.Println(aJson.String("idade")) // 28

fmt.Println(aJson.Int("name")) // 0
fmt.Println(aJson.String("name")) // Ricardo Longa

fmt.Println(aJson.String("skills")) // ["Golang","Android"]

2. Advanced Syntax

2.1. Check if JSON has key

jsonDoc := `{
    "name":"Ricardo Longa",
    "idade":28,
    "skills":[
        "Golang","Android"
    ]
}`

mJson := djson.New().Parse(jsonDoc)
aJson, _ := mJson.Array("skills")

fmt.Println(mJson.HasKey("skills")) // true
fmt.Println(aJson.Haskey(1)) // true
fmt.Println(aJson.HasKey("addr"))   // false

2.2. Update value via path

jsonDoc := `[{
    "name":"Ricardo Longa",
    "idade":28,
    "skills":[ "Golang","Android" ]
},
{
    "name":"Hery Victor",
    "idade":32,
    "skills":[ "Golang", "Java" ]
}]`

mJson := djson.New().Parse(jsonDoc)

_ = mJson.UpdatePath(`[1]["name"]`, djson.Object{
    "family": "Victor",
    "first":  "Hery",
})

// must be like
// [{"idade":28,"name":"Ricardo Longa","skills":["Golang","Android"]},
// {"idade":32,"name":{"family":"Victor","first":"Hery"},"skills":["Golang","Java"]}]
fmt.Println(mJson.ToString()) 

2.3. Remove value via path

jsonDoc := `[{
    "name":"Ricardo Longa",
    "idade":28,
    "skills":[ "Golang","Android" ]
},
{
    "name":"Hery Victor",
    "idade":32,
    "skills":[ "Golang", "Java" ]
}]`

mJson := djson.New().Parse(jsonDoc)

_ = mJson.RemovePath(`[1]["skills"]`)

// must be like
// [{"idade":28,"name":"Ricardo Longa","skills":["Golang","Android"]},{"idade":32,"name":"Hery Victor"}]
fmt.Println(mJson.ToString()) 

2.4. Manipluate value via sharing

jsonDoc := `[{
    "name":"Ricardo Longa",
    "idade":28,
    "skills":["Golang","Android"]
},
{
    "name":"Hery Victor",
    "idade":32,
    "skills":["Golang","Java"]
}]`

aJson := djson.New().Parse(jsonDoc)

bJson, _ := aJson.Object(1) // now, bJson shares *djson.DO with aJson

bJson.Put(djson.Object{"hobbies": djson.Array{"game"}}) // append Array to Object
bJson.UpdatePath(`["hobbies"][1]`, "running") // append value to Array
bJson.UpdatePath(`["hobbies"][0]`, "art") // replace value

// must be like
// [{"idade":28,"name":"Ricardo Longa","skills":["Golang","Android"]},
// {"hobbies":["art","running"],"idade":32,"name":"Hery Victor","skills":["Golang","Java"]}]
fmt.Println(aJson.ToString())

2.4. Default Value

jsonDoc := `{
    "name":"Ricardo Longa",
    "idade":28,
    "skills":["Golang","Android"]
}`

mJson := djson.New().Parse(jsonDoc)

fmt.Println(mJson.Int("idade", 10)) // must be 28 which is int64
fmt.Println(mJson.Int("name", 10)) // must be 10 because `name` field cannot be convert to integer
fmt.Println(mJson.Int("hobbies", 10)) // must be 10 because no such field `hobbies`

2.5. To Structure

  • DJSON supports null package for sqlboiler (github.com/volatiletech/null)
type User struct {
    Id    string      `json:"id"`
    Name  string      `json:"name"`
    Email null.String `json:"email"`
}

var user User

mJson := djson.New().Put(
    Object{
        "id":    "id-1234",
        "name":  "Ricardo Longa",
        "email": "[email protected]",
    },
)

mJson.ToFields(&user, "id", "email") // only (`id`, `email`) tag

fmt.Println(user) // must be {id-1234  {[email protected] true}}

2.6. From Structure

type User struct {
    Id    string      `json:"id"`
    Name  string      `json:"name"`
    Email null.String `json:"email"`
}

var user = User{
    Id:   "id-1234",
    Name: "Ricardo Longa",
    Email: null.String{
        String: "[email protected]",
        Valid:  true,
    },
}

mJson := djson.New()
mJson.FromFields(user) // no tag

// must be like {"email":"[email protected]","id":"id-1234","name":"Ricardo Longa"}
fmt.Println(mJson.ToString()) 

2.7. From Map and Structure

type Name struct {
    First  string `json:"first"`
    Family string `json:"family"`
}

user := make(map[string]interface{})

user["id"] = "id-1234"
user["name"] = Name{
    First:  "Ricardo",
    Family: "Longa",
}

user["email"] = null.String{
    String: "[email protected]",
    Valid:  true,
}

mJson := djson.New()
mJson.FromFields(user, "name.first", "email") // tag has depth concept

// must be like {"email":"[email protected]","name":{"first":"Ricardo"}}
fmt.Println(mJson.ToString())

# Functions

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
ISO 3166-2 : KR-XX, GH-XX, ...
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
js must be array json.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
o = object djson.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Constants

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Variables

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
.NET JavaScriptSerializer.MaxJsonLength.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Structs

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Type aliases

No description provided by the author
No description provided by the author