const mixinafJson::JsonConverters
afJson::JsonConverters
@Js
(Service) - Converts Fantom objects to and from their JSON representation.
- defConvs
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
fantomTypeisnull, thennullis always returned.- fromJsonObj
abstract Obj? fromJsonObj([Str:Obj?]? jsonObj, Type? fantomType)Converts a JSON object to the given Fantom type.
jsonObjis nullable so converters can choose whether or not to create empty lists and maps.- fromJsonVal
abstract Obj? fromJsonVal(Obj? jsonVal, Type? fantomType)Converts a JSON value to the given Fantom type. If
fantomTypeisnullthennullis always returned.jsonValis nullable so converters can choose whether or not to create empty lists and maps.- get
@Operator
abstract JsonConverter get(Type type)Returns the
Converterinstance used to convert the given type.- make
static new make([Type:JsonConverter]? converters := null, [Str:Obj?]? options := null)Returns a new
JsonConvertersinstance.If
convertersisnullthendefConvsis 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 : trueOverride
makeEntityto have IoC create entity instances. SetstrictModetotrueto Err if the JSON contains unmapped data.Serializable Mode is where all non-transient fields are converted, regardless of any
@JsonPropertyfacets. Data from@JsonPropertyfacets, however, is still honoured if defined.- normaliseKeyNamesFn
static |Obj?->Obj? normaliseKeyNamesFn()Returns a fn that normalises
.NETandsnake_casekey 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.
optionsis passed toJsonWriter, so may just betruefor pretty printing.- toJsonObj
abstract [Str:Obj?]? toJsonObj(Obj? fantomObj)Converts the given Fantom object to its JSON object representation.
fantomObjis nullable so converters can create empty / default objects.- toJsonVal
abstract Obj? toJsonVal(Obj? fantomObj, Type? fantomType)Converts the given Fantom object to its JSON representation. If
fantomTypeisnullthennullis always returned.fantomTypeis required in casefantomObjis null.fantomObjis nullable so converters can create empty / default objects.- withOptions
abstract JsonConverters withOptions(Str:Obj? newOptions)Returns a new
JsonConverterswhose options are overridden with the given ones.