Skip to content

Commit

Permalink
create readme.md
Browse files Browse the repository at this point in the history
  • Loading branch information
m7shapan committed Jun 16, 2020
1 parent e4b0a5e commit 0dcd530
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 1 deletion.
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.

Copyright [yyyy] [name of copyright owner]
Copyright [2020] [Mohamed Shapan <[email protected]>]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
Expand Down
84 changes: 84 additions & 0 deletions readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# NJson
NJSON is a Go package that Unmarshal/Decode nested JSON data depend on provided path

## Installation
```bash
$ go get -u github.com/m7shapan/njson
```

## Example

```go
package main

import (
"fmt"

"github.com/m7shapan/njson"
)

func main() {
json := `
{
"name": {"first": "Mohamed", "last": "Shapan"},
"age": 26,
"friends": [
{"name": "Asma", "age": 26},
{"name": "Ahmed", "age": 25},
{"name": "Mahmoud", "age": 30}
]
}`

type User struct {
Name string `njson:"name.last"`
Age int `njson:"age"`
Friends []string `njson:"friends.#.name"`
}

u := User{}

err := njson.Unmarshal([]byte(json), &u)
if err != nil {
// do anything
}

fmt.Printf("%+v\n", u) // {Name:Shapan Age:26 Friends:[Asma Ahmed Mahmoud]}
}
```

## Path Syntax
A path is a series of keys separated by a dot. A key may contain special wildcard characters '*' and '?'. To access an array value use the index as the key. To get the number of elements in an array or to access a child path, use the '#' character. The dot and wildcard characters can be escaped with '\'.
```json
{
"name": {"first": "Tom", "last": "Anderson"},
"age":37,
"children": ["Sara","Alex","Jack"],
"fav.movie": "Deer Hunter",
"friends": [
{"first": "Dale", "last": "Murphy", "age": 44, "nets": ["ig", "fb", "tw"]},
{"first": "Roger", "last": "Craig", "age": 68, "nets": ["fb", "tw"]},
{"first": "Jane", "last": "Murphy", "age": 47, "nets": ["ig", "tw"]}
]
}
```

```
"name.last" >> "Anderson"
"age" >> 37
"children" >> ["Sara","Alex","Jack"]
"children.#" >> 3
"children.1" >> "Alex"
"child*.2" >> "Jack"
"c?ildren.0" >> "Sara"
"fav\.movie" >> "Deer Hunter"
"friends.#.first" >> ["Dale","Roger","Jane"]
"friends.1.last" >> "Craig"
```

## TODOs
- [ ] Add test cases
- [ ] Improve `map` type Unmarshal/Decode performance
- [ ] Improve `struct` type Unmarshal/Decode performance

## Contact
Mohamed Shapan [@m7shapan](https://twitter.com/M7Shapan)

0 comments on commit 0dcd530

Please sign in to comment.