copy langext & termext from ffsclient
This commit is contained in:
65
langext/json.go
Normal file
65
langext/json.go
Normal file
@@ -0,0 +1,65 @@
|
||||
package langext
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type H map[string]any
|
||||
|
||||
type A []any
|
||||
|
||||
func TryPrettyPrintJson(str string) string {
|
||||
var prettyJSON bytes.Buffer
|
||||
if err := json.Indent(&prettyJSON, []byte(str), "", " "); err != nil {
|
||||
return str
|
||||
}
|
||||
return prettyJSON.String()
|
||||
}
|
||||
|
||||
func PrettyPrintJson(str string) (string, bool) {
|
||||
var prettyJSON bytes.Buffer
|
||||
if err := json.Indent(&prettyJSON, []byte(str), "", " "); err != nil {
|
||||
return str, false
|
||||
}
|
||||
return prettyJSON.String(), true
|
||||
}
|
||||
|
||||
func PatchJson[JV string | []byte](rawjson JV, key string, value any) (JV, error) {
|
||||
var err error
|
||||
|
||||
var jsonpayload map[string]any
|
||||
err = json.Unmarshal([]byte(rawjson), &jsonpayload)
|
||||
if err != nil {
|
||||
return *new(JV), fmt.Errorf("failed to unmarshal payload: %w", err)
|
||||
}
|
||||
|
||||
jsonpayload[key] = value
|
||||
|
||||
newjson, err := json.Marshal(jsonpayload)
|
||||
if err != nil {
|
||||
return *new(JV), fmt.Errorf("failed to re-marshal payload: %w", err)
|
||||
}
|
||||
|
||||
return JV(newjson), nil
|
||||
}
|
||||
|
||||
func PatchRemJson[JV string | []byte](rawjson JV, key string) (JV, error) {
|
||||
var err error
|
||||
|
||||
var jsonpayload map[string]any
|
||||
err = json.Unmarshal([]byte(rawjson), &jsonpayload)
|
||||
if err != nil {
|
||||
return *new(JV), fmt.Errorf("failed to unmarshal payload: %w", err)
|
||||
}
|
||||
|
||||
delete(jsonpayload, key)
|
||||
|
||||
newjson, err := json.Marshal(jsonpayload)
|
||||
if err != nil {
|
||||
return *new(JV), fmt.Errorf("failed to re-marshal payload: %w", err)
|
||||
}
|
||||
|
||||
return JV(newjson), nil
|
||||
}
|
Reference in New Issue
Block a user