const mixinafJson::JsonConverters
afJson::JsonConverters
@
Js
(Service) - Converts Fantom objects to and from their JSON representation.
- defConvs
const static Type:JsonConverter defConvs()
The default set of JSON <-> Fantom converters.
- fromJson
abstract Obj? fromJson(Str? json, Type? fantomType)
Converts a JSON string to the given Fantom type. If
fantomType
isnull
, thennull
is always returned.- fromJsonArray
abstract Obj?[]? fromJsonArray(Obj?[]? jsonArray, Type? fantomValType)
Converts a list of JSON values to the given Fantom (non-list) type.
fromJsonList(list, MyEntity#)
Convenience for calling
fromJsonVal()
with a cast.- fromJsonObj
abstract Obj? fromJsonObj([Str:Obj?]? jsonObj, Type? fantomType)
Converts a JSON object to the given Fantom type.
Convenience for calling
fromJsonVal()
with a cast.- fromJsonVal
abstract Obj? fromJsonVal(Obj? jsonVal, Type? fantomType)
Converts a JSON value to the given Fantom type. If
fantomType
isnull
thennull
is always returned.jsonVal
is nullable so converters can choose whether or not to create empty lists and maps.- get
@
Operator
abstract JsonConverter get(Type type)Returns the
Converter
instance used to convert the given type.- make
static new make([Type:JsonConverter]? converters := null, [Str:Obj?]? options := null)
Returns a new
JsonConverters
instance.If
converters
isnull
thendefConvs
is used. Common options are:afJson.makeEntity : |Type type, Field:Obj? fieldVals->Obj?| { BeanBuilder.build(type, vals) } afJson.strictMode : false afJson.dateFormat : "YYYY-MM-DD" afJson.dateTimeFormat : "YYYY-MM-DD'T'hh:mm:ss.FFFz" afJson.propertyCache : JsonPropertyCache() afJson.serializableMode : true
Override
makeEntity
to have IoC create entity instances. SetstrictMode
totrue
to Err if the JSON contains unmapped data.Serializable Mode is where all non-transient fields are converted, regardless of any
@JsonProperty
facets. Data from@JsonProperty
facets, however, is still honoured if defined.- normaliseKeyNamesFn
const static |Obj?->Obj? normaliseKeyNamesFn()
Returns a fn that normalises
.NET
andsnake_case
key names into standard Fantom camelCase names..NET examples ------------- UniqueID --> uniqueId SWVersion --> swVersion MegaVERIndex --> megaVerIndex UtilITEMS.Rec --> utilItems.rec Snake_case examples ------------------- unique_id --> uniqueId sw_Version --> swVersion mega_VER_Index --> megaVerIndex
Use as a hook option:
converters := JsonConverters(null, [ "afJson.fromJsonHook" : JsonConverters.normaliseKeyNamesFn ])
- toJson
abstract Str toJson(Obj? fantomObj, Obj? options := null)
Converts the given Fantom object to its JSON string representation.
options
is passed toJsonWriter
, so may just betrue
for pretty printing.- toJsonArray
abstract Obj?[]? toJsonArray(Obj?[]? fantomList)
Deeply converts the given Fantom List to its JSON representation.
Convenience for calling
toJsonVal()
with a cast.- toJsonObj
abstract [Str:Obj?]? toJsonObj(Obj? fantomObj)
Converts the given Fantom object to its JSON object representation.
Convenience for calling
toJsonVal()
with a cast.- toJsonVal
abstract Obj? toJsonVal(Obj? fantomObj, Type? fantomType := null)
Converts the given Fantom object to its JSON representation.
fantomObj
is nullable so converters can create empty / default objects.fantomType
in casefantomObj
is null, but defaults tofantomObj?.typeof
.- withOptions
abstract JsonConverters withOptions(Str:Obj? newOptions)
Returns a new
JsonConverters
whose options are overridden with the given ones.