https://github.com/tamboto2000/jsonextract
JSONExtract is a library for extracting any valid JSON from a given source, like string, bytes, file, or an io.Reader
https://github.com/tamboto2000/jsonextract
json-extractor json-parsing jsons
Last synced: 4 months ago
JSON representation
JSONExtract is a library for extracting any valid JSON from a given source, like string, bytes, file, or an io.Reader
- Host: GitHub
- URL: https://github.com/tamboto2000/jsonextract
- Owner: tamboto2000
- License: mit
- Created: 2020-12-12T19:32:47.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2021-02-23T17:50:50.000Z (over 5 years ago)
- Last Synced: 2024-06-19T05:43:27.058Z (almost 2 years ago)
- Topics: json-extractor, json-parsing, jsons
- Language: Go
- Homepage:
- Size: 4.92 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# JSONExtract
[](https://pkg.go.dev/github.com/tamboto2000/jsonextract/v3)
Package jsonextract is a library for extracting JSON from a given source, such as string, bytes, file, and io.Reader, providing methods for editing and evaluating json values. One of the cases to use this library is to extract all json strings in a scraped HTML page
### Installation
JSONExtract require Go v1.14 or higher
```sh
$ GO111MODULE go get github.com/tamboto2000/jsonextract/v3
```
### Sources
You can extract jsons from string, []byte, file, and an io.Reader
```go
// from string
jsons, err := jsonextract.FromString(str)
// from []byte
jsons, err := jsonextract.FromBytes(byts)
// from file path
jsons, err := jsonextract.FromFile(path)
// from io.Reader
jsons, err := jsonextract.FromReader(reader)
```
### JSON Kinds
There's 7 different kinds of JSON:
- Object
- Array
- String
- Integer
- Float
- Boolean
- Null
You can get JSON kind by calling ```JSON.Kind()```
```go
jsons, err := jsonextract.FromBytes(byts)
if err != nil {
panic(err.Error())
}
for _, json := range jsons {
// string
if json.Kind() == jsonextract.String {
// print string value
fmt.Println(json.String())
}
// int
if json.Kind() == jsonextract.Integer {
// print integer value, returned integer value is int64
fmt.Println(json.Integer())
}
// float
if json.Kind() == jsonextract.Float {
// print float value, returned float is float64
fmt.Println(json.Float())
}
// and so on...
}
```
Getter methods, such as ```JSON.String()```, ```JSON.Integer()```, ```JSON.Float()```, etc., will panic if ```JSON``` kind did not match the getter methods, for example, when trying to get string value from ```JSON``` with kind of ```Integer```. ```JSON``` with kind of ```Null``` didn't have getter method
### Modifying Value
Value inside JSON can be modified by setter methods, such as ```JSON.SetStr()```, ```JSON.SetInt()```, etc.
```go
// integer
if json.Kind() == jsonextract.Integer {
json.EditInt(23)
}
// string
if json.Kind() == jsonextract.String {
json.EditStr("Hello World!")
}
// and so on...
```
Setter methods will panic if JSON kind did not match with setter method, for example, trying to call ```JSON.SetInt()``` to ```JSON``` with kind of ```String```. ```JSON``` with kind of ```Null``` didn't have setter method
### JSON Object
Json object represented as ```JSON``` with kind of ```Object```. For adding a new value, call ```JSON.AddField()``` with param ```key``` as json field name, and ```val``` for the value
```go
json.AddField("name", "Franklin Collin Tamboto")
json.AddField("email", "tamboto2000@gmail.com")
json.AddField("id", 1)
i := 1
json.AddField("id", &i)
json.AddField("qty", int32(23))
json.AddField("userId", uint(2))
json.AddField("height", float32(3.2))
```
Just like package ```encoding/json```, ```map``` and ```struct``` will be marshaled as json object. ```map``` keys need to be type ```string``` or an integer type, otherwise panic will occur
```go
type User struct {
ID int `json:"id"`
Name string `json:"name"`
// field name will be used as json field name if json tag is not present,
// so this field will be marshaled as "Email":"value"
Email string
}
// add struct
json.AddField("user", User{
ID: 1,
Name: "Franklin Collin Tamboto",
Email: "tamboto2000@gmail.com",
})
// add map
json.AddField("item", map[interface{}]interface{}{
"Name": "ROG Zephyrus M",
"Qty": 23,
123: 456,
})
// add value with int as key
json.AddField(123, 456)
// add value with uint8 as key
json.AddField(uint8(432), "123")
```
To delete an item from object, call ```JSON.DeleteField()``` with param ```key``` as json field name for deletion. ```key``` must be string or an integer type, otherwise panic will occur. ```JSON.DeleteField()``` return ```true``` if item is exist, otherwise ```false``` will returned
```go
// delete with string key
if json.DeleteField("user") {
fmt.Println("item deleted")
} else {
fmt.Println("item not exist")
}
// delete with integer key
if json.DeleteField(int32(123)) {
fmt.Println("item deleted")
} else {
fmt.Println("item not exist")
}
```
To access all contained items, call ```JSON.Object()```, this method will return ```map[interface{}]*JSON```
```go
fields := json.Object()
for _, f := range fields {
// do something...
}
```
Get contained items count by calling ```JSON.Len()```
```go
fmt.Println("len:", json.Len())
```
### JSON Array
Json array represented as ```JSON``` with kind of ```Array```. For adding a new value, call ```JSON.AddItem()``` with param ```val```. Will panic if ```val``` is not valid json value
```go
json.AddItem("Hello world")
```
Get contained items count by calling ```JSON.Len()```
```go
fmt.Println("len:", json.Len())
```
To delete an item, call ```json.DeleteItem()``` with param ```i``` as array index
```go
if json.DeleteItem(2) {
fmt.Println("item deleted")
} else {
fmt.Println("item is not exist")
}
```
Get all items by calling ```JSON.Array()```
```go
items := json.Array()
for _, item := range items {
// do something
}
```
### Additional Note
When an item is edited inside ```JSON```, the contained raw json will automatically re-generated.
*DO NOT PERFORM ANY SETTER OR GETTER METHODS CONCURRENTLY*
### Documentation and Examples
See [Documentation](https://pkg.go.dev/github.com/tamboto2000/jsonextract/v3) for more information. There's also some [examples](https://github.com/tamboto2000/jsonextract/tree/v3/examples) you can look up to
License
----
MIT