diff --git a/README.md b/README.md index 8cb729f..23fb249 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,6 @@ Fast JSON encoder/decoder compatible with encoding/json for Go We are accepting requests for features that will be implemented between v0.8.0 and v.1.0.0. If you have the API you need, please submit your issue [here](https://github.com/goccy/go-json/issues). -For example, I'm thinking of supporting `context.Context` of `json.Marshaler` and decoding using JSON Path. # Features @@ -32,6 +31,7 @@ For example, I'm thinking of supporting `context.Context` of `json.Marshaler` an - Flexible customization with options - Coloring the encoded string - Can propagate context.Context to `MarshalJSON` or `UnmarshalJSON` +- Can dynamically filter the fields of the structure type-safely # Installation diff --git a/query.go b/query.go index 137e663..4b11cf2 100644 --- a/query.go +++ b/query.go @@ -5,15 +5,25 @@ import ( ) type ( + // FieldQuery you can dynamically filter the fields in the structure by creating a FieldQuery, + // adding it to context.Context using SetFieldQueryToContext and then passing it to MarshalContext. + // This is a type-safe operation, so it is faster than filtering using map[string]interface{}. FieldQuery = encoder.FieldQuery FieldQueryString = encoder.FieldQueryString ) var ( - FieldQueryFromContext = encoder.FieldQueryFromContext + // FieldQueryFromContext get current FieldQuery from context.Context. + FieldQueryFromContext = encoder.FieldQueryFromContext + // SetFieldQueryToContext set current FieldQuery to context.Context. SetFieldQueryToContext = encoder.SetFieldQueryToContext ) +// BuildFieldQuery builds FieldQuery by fieldName or sub field query. +// First, specify the field name that you want to keep in structure type. +// If the field you want to keep is a structure type, by creating a sub field query using BuildSubFieldQuery, +// you can select the fields you want to keep in the structure. +// This description can be written recursively. func BuildFieldQuery(fields ...FieldQueryString) (*FieldQuery, error) { query, err := Marshal(fields) if err != nil { @@ -22,6 +32,7 @@ func BuildFieldQuery(fields ...FieldQueryString) (*FieldQuery, error) { return FieldQueryString(query).Build() } +// BuildSubFieldQuery builds sub field query. func BuildSubFieldQuery(name string) *SubFieldQuery { return &SubFieldQuery{name: name} }