
Security News
Meet Socket at Black Hat and DEF CON 2025 in Las Vegas
Meet Socket at Black Hat & DEF CON 2025 for 1:1s, insider security talks at Allegiant Stadium, and a private dinner with top minds in software supply chain security.
github.com/Perseus/go-rejson/v4
Note: Currently, go-ReJSON only support redislabs/rejson with version <=1.0.8. If you are using higher versions, some commands might not work as expected
Go-ReJSON is a Go client for ReJSON Redis Module.
ReJSON is a Redis module that implements ECMA-404 The JSON Data Interchange Standard as a native data type. It allows storing, updating and fetching JSON values from Redis keys (documents).
Primary features of ReJSON Module:
* Full support of the JSON standard
* JSONPath-like syntax for selecting element inside documents
* Documents are stored as binary data in a tree structure, allowing fast access to sub-elements
* Typed atomic operations for all JSON values types
Each and every feature of ReJSON Module is fully incorporated in the project.
Enjoy ReJSON with the type-safe Redis client, Go-Redis/Redis
or use the
print-like Redis-api client GoModule/Redigo
. Go-ReJSON supports both the
clients. Use any of the above two client you want, Go-ReJSON helps you out with all its features and functionalities in
a more generic and standard way.
Support for mediocregopher/radix
and other Redis clients is in our RoadMap. Any contributions to the support for other
clients is hearty welcome.
go get github.com/Perseus/go-rejson/v4
package main
import (
"context"
"encoding/json"
"flag"
"fmt"
"log"
"github.com/Perseus/go-rejson/v4"
goredis "github.com/go-redis/redis/v8"
"github.com/gomodule/redigo/redis"
)
// Name - student name
type Name struct {
First string `json:"first,omitempty"`
Middle string `json:"middle,omitempty"`
Last string `json:"last,omitempty"`
}
// Student - student object
type Student struct {
Name Name `json:"name,omitempty"`
Rank int `json:"rank,omitempty"`
}
func Example_JSONSet(rh *rejson.Handler) {
student := Student{
Name: Name{
"Mark",
"S",
"Pronto",
},
Rank: 1,
}
res, err := rh.JSONSet("student", ".", student)
if err != nil {
log.Fatalf("Failed to JSONSet")
return
}
if res.(string) == "OK" {
fmt.Printf("Success: %s\n", res)
} else {
fmt.Println("Failed to Set: ")
}
studentJSON, err := redis.Bytes(rh.JSONGet("student", "."))
if err != nil {
log.Fatalf("Failed to JSONGet")
return
}
readStudent := Student{}
err = json.Unmarshal(studentJSON, &readStudent)
if err != nil {
log.Fatalf("Failed to JSON Unmarshal")
return
}
fmt.Printf("Student read from redis : %#v\n", readStudent)
}
func main() {
var addr = flag.String("Server", "localhost:6379", "Redis server address")
rh := rejson.NewReJSONHandler()
flag.Parse()
// Redigo Client
conn, err := redis.Dial("tcp", *addr)
if err != nil {
log.Fatalf("Failed to connect to redis-server @ %s", *addr)
}
defer func() {
_, err = conn.Do("FLUSHALL")
err = conn.Close()
if err != nil {
log.Fatalf("Failed to communicate to redis-server @ %v", err)
}
}()
rh.SetRedigoClient(conn)
fmt.Println("Executing Example_JSONSET for Redigo Client")
Example_JSONSet(rh)
// GoRedis Client
cli := goredis.NewClient(&goredis.Options{Addr: *addr})
defer func() {
if err := cli.FlushAll(context.Background()).Err(); err != nil {
log.Fatalf("goredis - failed to flush: %v", err)
}
if err := cli.Close(); err != nil {
log.Fatalf("goredis - failed to communicate to redis-server: %v", err)
}
}()
rh.SetGoRedisClient(cli)
fmt.Println("\nExecuting Example_JSONSET for GoRedis Client")
Example_JSONSet(rh)
}
FAQs
Unknown package
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Meet Socket at Black Hat & DEF CON 2025 for 1:1s, insider security talks at Allegiant Stadium, and a private dinner with top minds in software supply chain security.
Security News
CAI is a new open source AI framework that automates penetration testing tasks like scanning and exploitation up to 3,600× faster than humans.
Security News
Deno 2.4 brings back bundling, improves dependency updates and telemetry, and makes the runtime more practical for real-world JavaScript projects.