User Guide Cancel

SerializeJSON

  1. CFML Reference User Guide
  2. ColdFusion functions
    1. ColdFusion functions by category
    2. Functions a-b
      1. Abs
      2. ACos
      3. AddSOAPRequestHeader
      4. AddSOAPResponseHeader
      5. AjaxLink
      6. AjaxOnLoad
      7. ApplicationStop
      8. ArrayAppend
      9. ArrayAvg
      10. ArrayClear
      11. ArrayContains
      12. ArrayContainsNoCase
      13. ArrayDelete
      14. ArrayDeleteAt
      15. ArrayDeleteNoCase
      16. ArrayEach
      17. ArrayFilter
      18. ArrayFind
      19. ArrayFindAll
      20. ArrayFindAllNoCase
      21. ArrayFindNoCase
      22. ArrayInsertAt
      23. ArrayIsDefined
      24. ArrayIsEmpty
      25. ArrayLen
      26. ArrayMap
      27. ArrayMax
      28. ArrayMin
      29. ArrayNew
      30. ArrayPrepend
      31. ArrayReduce
      32. ArrayResize
      33. ArraySet
      34. ArraySetMetadata
      35. ArraySlice
      36. ArraySort
      37. ArraySum
      38. ArraySwap
      39. ArrayToList
      40. Asc
      41. ASin
      42. Atn
      43. AuthenticatedContext
      44. AuthenticatedUser
      45. BinaryDecode
      46. BinaryEncode
      47. BitAnd
      48. BitMaskClear
      49. BitMaskRead
      50. BitMaskSet
      51. BitNot
      52. BitOr
      53. BitSHLN
      54. BitSHRN
      55. BitXor
      56. BooleanFormat
    3. Functions-c-d
      1. CacheGet
      2. CacheGetAllIds
      3. CacheGetMetadata
      4. CacheGetProperties
      5. CacheGetSession
      6. CacheIdExists
      7. CachePut
      8. CacheRegionExists
      9. CacheRegionNew
      10. CacheRegionRemove
      11. CacheRemove
      12. CacheRemoveAll
      13. CacheSetProperties
      14. CallStackDump
      15. CallStackGet
      16. CanDeSerialize
      17. Canonicalize
      18. CanSerialize
      19. Ceiling
      20. CharsetDecode
      21. CharsetEncode
      22. Chr
      23. CJustify
      24. Compare
      25. CompareNoCase
      26. Cos
      27. CreateDate
      28. CreateDateTime
      29. CreateObject
      30. CreateObject: .NET object
      31. CreateObject: COM object
      32. CreateObject: component object
      33. CreateObject: CORBA object
      34. CreateObject: Java or EJB object
      35. CreateObject: web service object
      36. CreateODBCDate
      37. CreateODBCDateTime
      38. CreateODBCTime
      39. CreateSignedJWT
      40. CreateEncryptedJWT
      41. CreateTime
      42. CreateTimeSpan
      43. CreateUUID
      44. CSRFGenerateToken
      45. CSRFVerifyToken
      46. DateAdd
      47. DateCompare
      48. DateConvert
      49. DateDiff
      50. DateFormat
      51. DatePart
      52. DateTimeFormat
      53. Day
      54. DayOfWeek
      55. DayOfWeekAsString
      56. DayOfYear
      57. DaysInMonth
      58. DaysInYear
      59. DE
      60. DecimalFormat
      61. DecodeForHTML
      62. DecodeFromURL
      63. DecrementValue
      64. Decrypt
      65. DecryptBinary
      66. DeleteClientVariable
      67. Deserialize
      68. DeserializeJSON
      69. DeserializeXML
      70. DirectoryCopy
      71. DirectoryCreate
      72. DirectoryDelete
      73. DirectoryExists
      74. DirectoryList
      75. DirectoryRename
      76. DollarFormat
      77. DotNetToCFType
      78. Duplicate
    4. Functions-e-g
      1. EncodeForCSS
      2. EncodeForDN
      3. EncodeForHTML
      4. EncodeForHTMLAttribute
      5. EncodeForJavaScript
      6. EncodeForLDAP
      7. EncodeForURL
      8. EncodeForXML
      9. EncodeForXMLAttribute
      10. EncodeForXpath
      11. Encrypt
      12. EncryptBinary
      13. EntityDelete
      14. EntityLoad
      15. EntityLoadByExample
      16. EntityLoadByPK
      17. EntityMerge
      18. EntityNew
      19. EntityReload
      20. EntitySave
      21. EntityToQuery
      22. Evaluate
      23. Exp
      24. ExpandPath
      25. FileClose
      26. FileCopy
      27. FileDelete
      28. FileExists
      29. FileGetMimeType
      30. FileIsEOF
      31. FileMove
      32. FileOpen
      33. FileRead
      34. FileReadBinary
      35. FileReadLine
      36. FileSeek
      37. FileSetAccessMode
      38. FileSetAttribute
      39. FileSetLastModified
      40. FileSkipBytes
      41. FileUpload
      42. FileUploadAll
      43. FileWrite
      44. FileWriteLine
      45. Find
      46. FindNoCase
      47. FindOneOf
      48. FirstDayOfMonth
      49. Fix
      50. Floor
      51. FormatBaseN
      52. GeneratePBKDFKey
      53. GenerateSecretKey
      54.  GetApplicationMetadata
      55. GetAuthUser
      56. GetBaseTagData
      57. GetBaseTagList
      58. GetBaseTemplatePath
      59. GetClientVariablesList
      60. GetComponentMetaData
      61. GetContextRoot
      62. GetCPUUsage
      63. GetCurrentTemplatePath
      64. GetDirectoryFromPath
      65. GetEncoding
      66. GetException
      67. GetFileFromPath
      68. GetFileInfo
      69. GetFreeSpace
      70. GetFunctionCalledName
      71. GetFunctionList
      72. GetGatewayHelper
      73. GetHttpRequestData
      74. GetHttpTimeString
      75. GetK2ServerDocCount
      76. GetK2ServerDocCountLimit
      77. GetLocale
      78. GetLocaleDisplayName
      79. GetLocalHostIP
      80. GetMetaData
      81. GetMetricData
      82. GetPageContext
      83. GetPrinterInfo
      84. GetPrinterList
      85. GetProfileSections
      86. GetProfileString
      87. GetReadableImageFormats
      88. GetSafeHTML
      89. GetSAMLAuthRequest
      90. GetSAMLLogoutRequest
      91. GenerateSAMLSPMetadata
      92. GetSOAPRequest
      93. GetSOAPRequestHeader
      94. GetSOAPResponse
      95. GetSOAPResponseHeader
      96. GetSystemFreeMemory
      97. GetSystemTotalMemory
      98. GetTempDirectory
      99. GetTempFile
      100. GetTemplatePath
      101. GetTickCount
      102. GetTimeZoneInfo
      103. GetToken
      104. GetTotalSpace
      105. GetUserRoles
      106. GetVFSMetaData
      107. GetWriteableImageFormats
    5. Functions-h-im
      1. Hash
      2. HMac
      3. Hour
      4. HQLMethods
      5. HTMLCodeFormat
      6. HTMLEditFormat
      7. IIf
      8. ImageAddBorder
      9. ImageBlur
      10. ImageClearRect
      11. ImageCopy
      12. ImageCreateCaptcha
      13. ImageCrop
      14. ImageDrawArc
      15. ImageDrawBeveledRect
      16. ImageDrawCubicCurve
      17. ImageDrawLine
      18. ImageDrawLines
      19. ImageDrawOval
      20. ImageDrawPoint
      21. ImageDrawQuadraticCurve
      22. ImageDrawRect
      23. ImageDrawRoundRect
      24. ImageDrawText
      25. ImageFlip
      26. ImageGetBlob
      27. ImageGetBufferedImage
      28. ImageGetEXIFMetadata
      29. ImageGetEXIFTag
      30. ImageGetHeight
      31. ImageGetIPTCMetadata
      32. ImageGetIPTCTag
      33. ImageGetMetadata
      34. ImageGetWidth
      35. ImageGrayscale
      36. ImageInfo
      37. ImageMakeColorTransparent
      38. ImageMakeTranslucent
      39. ImageNegative
      40. ImageNew
      41. ImageOverlay
      42. ImagePaste
      43. ImageRead
      44. ImageReadBase64
      45. ImageResize
      46. ImageRotate
      47. ImageRotateDrawingAxis
      48. ImageScaleToFit
      49. ImageSetAntialiasing
      50. ImageSetBackgroundColor
      51. ImageSetDrawingColor
      52. ImageSetDrawingStroke
      53. ImageSetDrawingTransparency
      54. ImageSharpen
      55. ImageShear
      56. ImageShearDrawingAxis
      57. ImageTranslate
      58. ImageTranslateDrawingAxis
      59. ImageWrite
      60. ImageWriteBase64
      61. ImageXORDrawingMode
    6. Functions-in-k
      1. IncrementValue
      2. InputBaseN
      3. Insert
      4. Int
      5. InvalidateOauthAccesstoken
      6. Invoke
      7. InitSAMLAuthRequest
      8. InitSAMLLogoutRequest
      9. InvokeCFClientFunction
      10. IsArray
      11. IsAuthenticated
      12. IsAuthorized
      13. IsBinary
      14. IsBoolean
      15. IsClosure
      16. IsCustomFunction
      17. IsDate
      18. IsDateObject
      19. IsDDX
      20. IsDebugMode
      21. IsDefined
      22. IsImage
      23. IsImageFile
      24. IsInstanceOf
      25. IsIPv6
      26. IsJSON
      27. IsK2ServerABroker
      28. IsK2ServerDocCountExceeded
      29. IsK2ServerOnline
      30. IsLeapYear
      31. IsLocalHost
      32. IsNull
      33. IsNumeric
      34. IsNumericDate
      35. IsObject
      36. isOnline
      37. IsPDFArchive
      38. IsPDFFile
      39. IsPDFObject
      40. IsProtected
      41. IsQuery
      42. isSamlLogoutResponse
      43. isSafeHTML
      44. IsSimpleValue
      45. IsSOAPRequest
      46. IsSpreadsheetFile
      47. IsSpreadsheetObject
      48. IsStruct
      49. IsUserInAnyRole
      50. IsUserInRole
      51. IsUserLoggedIn
      52. IsValid
      53. IsValidOauthAccesstoken
      54. IsWDDX
      55. IsXML
      56. IsXmlAttribute
      57. IsXmlDoc
      58. IsXmlElem
      59. IsXmlNode
      60. IsXmlRoot
      61. JavaCast
      62. JSStringFormat
    7. Functions-l
      1. LCase
      2. Left
      3. Len
      4. ListAppend
      5. ListChangeDelims
      6. ListContains
      7. ListContainsNoCase
      8. ListDeleteAt
      9. ListEach
      10. ListFilter
      11. ListFind
      12. ListFindNoCase
      13. ListFirst
      14. ListGetAt
      15. ListInsertAt
      16. ListLast
      17. ListLen
      18. ListMap
      19. ListPrepend
      20. ListQualify
      21. ListReduce
      22. ListRemoveDuplicates
      23. ListRest
      24. ListSetAt
      25. ListSort
      26. ListToArray
      27. ListValueCount
      28. ListValueCountNoCase
      29. LJustify
      30. Location
      31. Log
      32. Log10
      33. LSCurrencyFormat
      34. LSDateFormat
      35. LSDateTimeFormat
      36. LSEuroCurrencyFormat
      37. LSIsCurrency
      38. LSIsDate
      39. LSIsNumeric
      40. LSNumberFormat
      41. LSParseCurrency
      42. LSParseDateTime
      43. LSParseEuroCurrency
      44. LSParseNumber
      45. LSTimeFormat
      46. LTrim
    8. Functions-m-r
      1. Max
      2. Mid
      3. Min
      4. Minute
      5. Month
      6. MonthAsString
      7. Now
      8. NumberFormat
      9. ObjectEquals
      10. ObjectLoad
      11. ObjectSave
      12. OnWSAuthenticate
      13. ORMClearSession
      14. ORMCloseAllSessions
      15. ORMCloseSession
      16. ORMEvictCollection
      17. ORMEvictEntity
      18. ORMEvictQueries
      19. ORMExecuteQuery
      20. ORMFlush
      21. ORMFlushall
      22. ORMGetSession
      23. ORMGetSessionFactory
      24. ORMIndex
      25. ORMIndexPurge
      26. ORMReload
      27. ORMSearch
      28. ORMSearchOffline
      29. ParagraphFormat
      30. ParameterExists
      31. ParseDateTime
      32. Pi
      33. PrecisionEvaluate
      34. ProcessSAMLResponse
      35. ProcessSAMLLogoutRequest
      36. Quarter
      37. PreserveSingleQuotes
      38. QueryAddColumn
      39. QueryAddRow
      40. QueryConvertForGrid
      41. QueryExecute
      42. QueryFilter
      43. QueryGetResult
      44. QueryGetRow
      45. QueryKeyExists
      46. QueryMap
      47. QueryNew
      48. QueryReduce
      49. QuerySetCell
      50. QuotedValueList
      51. QueryEach
      52. Rand
      53. Randomize
      54. RandRange
      55. ReEscape
      56. REFind
      57. REFindNoCase
      58. ReleaseComObject
      59. REMatch
      60. REMatchNoCase
      61. RemoveCachedQuery
      62. RemoveChars
      63. RepeatString
      64. Replace
      65. ReplaceList
      66. ReplaceNoCase
      67. REReplace
      68. REReplaceNoCase
      69. RestDeleteApplication
      70. RestSetResponse
      71. RestInitApplication
      72. Reverse
      73. Right
      74. RJustify
      75. Round
      76. RTrim
    9. Functions-s
      1. Second
      2. SendGatewayMessage
      3. SendSAMLLogoutResponse
      4. Serialize
      5. SerializeJSON
      6. SerializeXML
      7. SessionInvalidate
      8. SessionRotate
      9. SessionGetMetaData
      10. SessionInvalidate
      11. SessionRotate
      12. SetDay
      13. SetEncoding
      14. SetHour
      15. SetLocale
      16. SetMonth
      17. SetProfileString
      18. SetVariable
      19. SetYear
      20. Sgn
      21. Sin
      22. Sleep
      23. SpanExcluding
      24. SpanIncluding
      25. SpreadsheetAddAutoFilter
      26. SpreadsheetAddColumn
      27. SpreadsheetAddFreezePane
      28. SpreadsheetAddImage
      29. SpreadsheetAddInfo
      30. SpreadsheetAddPageBreaks
      31. SpreadsheetAddRow
      32. SpreadsheetAddRows
      33. SpreadsheetAddSplitPane
      34. SpreadsheetCreateSheet
      35. SpreadsheetDeleteColumn
      36. SpreadsheetDeleteColumns
      37. SpreadsheetDeleteRow
      38. SpreadsheetDeleteRows
      39. SpreadsheetFormatCell
      40. SpreadsheetFormatColumn
      41. SpreadsheetFormatCellRange
      42. SpreadsheetFormatColumn
      43. SpreadsheetFormatColumns
      44. SpreadsheetFormatRow
      45. SpreadsheetFormatRows
      46. SpreadsheetGetCellComment
      47. SpreadsheetGetCellFormula
      48. SpreadsheetGetCellValue
      49. SpreadsheetGetColumnCount
      50. SpreadsheetInfo
      51. SpreadsheetMergeCells
      52. SpreadsheetNew
      53. SpreadsheetRead
      54. SpreadsheetReadBinary
      55. SpreadsheetRemoveSheet
      56. SpreadsheetSetActiveSheet
      57. SpreadsheetSetActiveSheetNumber
      58. SpreadsheetSetCellComment
      59. SpreadsheetSetCellFormula
      60. SpreadsheetSetCellValue
      61. SpreadsheetSetColumnWidth
      62. SpreadsheetSetFooter
      63. SpreadsheetSetHeader
      64. SpreadsheetSetRowHeight
      65. SpreadsheetShiftColumns
      66. SpreadsheetShiftRows
      67. SpreadsheetWrite
      68. Sqr
      69. StripCR
      70. StructAppend
      71. StructClear
      72. StructCopy
      73. StructCount
      74. StructDelete
      75. StructEach
      76. StructFilter
      77. StructFind
      78. StructFindKey
      79. StructFindValue
      80. StructGet
      81. StructGetMetadata
      82. StructInsert
      83. StructIsEmpty
      84. StructKeyArray
      85. StructKeyExists
      86. StructKeyList
      87. StructMap
      88. StructNew
      89. StructReduce
      90. StructSetMetadata
      91. StructSort
      92. StructToSorted
      93. StructUpdate
      94. StoreSetMetadata
      95. StoreGetACL
      96. StoreGetMetadata
      97. StoreAddACL
      98. StoreSetACL
    10. Functions-t-z
      1. Tan
      2. ThreadJoin
      3. ThreadTerminate
      4. Throw
      5. TimeFormat
      6. ToBase64
      7. ToBinary
      8. ToScript
      9. ToString
      10. Trace
      11. Transactionandconcurrency
      12. TransactionCommit
      13. TransactionRollback
      14. TransactionSetSavePoint
      15. Trim
      16. UCase
      17. URLDecode
      18. URLEncodedFormat
      19. URLSessionFormat
      20. Val
      21. ValueList
      22. VerifyClient
      23. Week
      24. Wrap
      25. WriteDump
      26. WriteLog
      27. WriteOutput
      28. WSGetAllChannels
      29. WSGetSubscribers
      30. WSPublish
      31. WSSendMessage
      32. XmlChildPos
      33. XmlElemNew
      34. XmlFormat
      35. XmlGetNodeType
      36. XmlNew
      37. XmlParse
      38. XmlSearch
      39. XmlTransform
      40. XmlValidate
      41. Year
      42. YesNoFormat
  3. ColdFusion Tags
    1. ColdFusion tag summary
    2. ColdFusion tags by category
      1. Application framework tags
        1. cfapplication
        2. cfassociate
        3. cferror
        4. cfimport
        5. cfinterface
        6. cflock
        7. cfscript
        8. cfthread
      2. Communications tags
        1. cfexchangecalendar
        2. cfexchangeconnection
        3. cfexchangecontact
        4. cfexchangefilter
        5. cfexchangemail
        6. cfexchangetask
        7. cffeed
        8. cfmail
        9. cfmailparam
        10. cfmailpart
        11. cfpopcfimap
      3. Database manipulation tags
        1. cfdbinfo
        2. cfinsert
        3. cfobjectcache
        4. cfprocparam
        5. cfprocresult
        6. cfquery
        7. cfqueryparam
        8. cfstoredproc
        9. cftransaction
        10. cfupdate
      4. Data output tags
        1. cfchart
        2. cfchartdata
        3. cfchartseries
        4. cfcol
        5. cfcontent
        6. cfdocument
        7. cfdocumentitem
        8. cfdocumentsection
        9. cfflush
        10. cfheader
        11. cflog
        12. cfoutput
        13. cfpresentation
        14. cfpresentationslide
        15. cfpresenter
        16. cfprocessingdirective
        17. cfprint
        18. cfreport
        19. cfreportparam
        20. cfsilent
        21. cftable
      5. Debugging tags
        1. cfdump
        2. cftimer
        3. cftrace
      6. Exception handling tags
        1. cfcatch
        2. cferror
        3. cffinally
        4. cfrethrow
        5. cfthrow
        6. cftry
      7. Extensibility tags
        1. cfchart
        2. cfchartdata
        3. cfchartseries
        4. cfcollection
        5. cfcomponent
        6. cfexecute
        7. cfftp
        8. function
        9. cfindex
        10. cfinterface
        11. cfinvoke
        12. cfinvokeargument
        13. cfobject
        14. cfproperty
        15. cfreport
        16. cfreportparam
        17. cfreturn
        18. cfsearch
        19. cfsharepoint
        20. cfspreadsheet
        21. cfwddx
        22. cfxml
      8. File management tags
        1. cfdirectory
        2. cffile
        3. cffileupload
        4. cfftp
        5. cfzip
        6. cfzipparam
      9. Flow-control tags
        1. cfabort
        2. cfbreak
        3. cfcase
        4. cfcontinue
        5. cfdefaultcase
        6. cfelse
        7. cfelseif
        8. cfexecute
        9. cfexit
        10. cfif
        11. cfinclude
        12. cflocation
        13. cfloop
        14. cfrethrow
        15. cfswitch
        16. cfthrow
        17. cftry
      10. Forms tags
        1. cfapplet
        2. cfcalendar
        3. cffileupload
        4. cfform
        5. cfformgroup
        6. cfformitem
        7. cfgrid
        8. cfgridcolumn
        9. cfgridrow
        10. cfgridupdate
        11. cfinput
        12. cfpdf
        13. cfpdfform
        14. cfpdfformparam
        15. cfpdfparam
        16. cfpdfsubform
        17. cfselect
        18. cfslider
        19. cftextarea
        20. cftree
        21. cftreeitem
      11. Internet Protocol tags
        1. cfajaximport
        2. cfajaxproxy
        3. cfftp
        4. cffeed
        5. cfimap
        6. cfhttp
        7. cfhttpparam
        8. cfldap
        9. cfmail
        10. cfmailparam
        11. cfmailpart
        12. cfpop
        13. cfsprydataset
      12. Page processing tags
        1. cfcache
        2. cfcontent
        3. cfflush
        4. cfheader
        5. cfhtmlhead
        6. cfinclude
        7. cfprocessingdirective
        8. cfsetting
        9. cfsilent
      13. Security tags
        1. cflogin
        2. cfloginuser
        3. cflogout
        4. cfNTauthenticate
      14. Variable manipulation tags
        1. cfcookie
        2. cfdump
        3. cfparam
        4. cfregistry
        5. cfsavecontent
        6. cfschedule
        7. cfset
        8. cfsetting
      15. Other tags
        1. cfimage
        2. cflog
        3. cfregistry
    3. Tags a-b
      1. cfabort
      2. cfajaximport
      3. cfajaxproxy
      4. cfapplet
      5. cfapplication
      6. cfargument
      7. cfassociate
      8. cfauthenticate
      9. cfbreak
    4. Tags c
      1. cfcache
      2. cfcalendar
      3. cfcase
      4. cfcatch
      5. cfchart
      6. cfchartdata
      7. cfchartseries
      8. cfclient
      9. cfclientsettings
      10. cfcol
      11. cfcollection
      12. cfcomponent
      13. cfcontent
      14. cfcontinue
      15. cfcookie
      16. Tags d-e
    5. Tags f
      1. cffeed
      2. cffile
      3. cffile action = "append"
      4. cffile action = "copy"
      5. cffile action = "delete"
      6. cffile action = "move"
      7. cffile action = "read"
      8. cffile action = "readBinary"
      9. cffile action = "rename"
      10. cffile action = "upload"
      11. cffile action = "uploadAll"
      12. cffile action = "write"
      13. cffileupload
      14. cffinally
      15. cfflush
      16. cfform
      17. cfformgroup
      18. cfformitem
      19. cfftp
      20. cfftp: Connection: file and directory operations
      21. cfftp: Opening and closing FTP server connections
      22. cfftp : Opening and closing secure FTP server connections
      23. cfftp action = "listDir"
      24. cffunction
    6. Tags g-h
      1. cfgraph
      2. cfgraphdata
      3. cfgrid
      4. cfgridcolumn
      5. cfgridrow
      6. cfgridupdate
      7. cfheader
      8. cfhtmlhead
      9. cfhtmltopdf
      10. cfhtmltopdfitem
      11. cfhttp
      12. cfhttpparam
    7. Tags i
      1. cfif
      2. cfimage
      3. cfimap
      4. cfimapfilter
      5. cfimpersonate
      6. cfimport
      7. cfinclude
      8. cfindex
      9. cfinput
      10. cfinsert
      11. cfinterface
      12. cfinvoke
      13. cfinvokeargument
    8. Tags j-l
      1. cfjava
      2. cflayout
      3. cflayoutarea
      4. cfldap
      5. cflocation
      6. cflock
      7. cflog
      8. cflogin
      9. cfloginuser
      10. cflogout
      11. cfloop
      12. cfloop : conditional loop
      13. cfloop : index loop
      14. cfloop : looping over a COM collection or structure
      15. cfloop : looping over a date or time range
      16. cfloop : looping over a list, a file, or an array
      17. cfloop : looping over a query
    9. Tags m-o
      1. cfmail
      2. cfmailparam
      3. cfmailpart
      4. cfmap
      5. cfmapitem
      6. cfmediaplayer
      7. cfmenu
      8. cfmenuitem
      9. cfmessagebox
      10. cfmodule
      11. cfNTauthenticate
      12. cfoauth
      13. cfobject
      14. cfobject: .NET object
      15. cfobject: COM object
      16. cfobject: component object
      17. cfobject: CORBA object
      18. cfobject: Java or EJB object
      19. cfobject: web service object
      20. cfobjectcache
      21. cfoutput
    10. Tags p-q
      1. cfparam
      2. cfpdf
      3. cfpdfform
      4. cfpdfformparam
      5. cfpdfparam
      6. cfpdfsubform
      7. cfpod
      8. cfpop
      9. cfpresentation
      10. cfpresentationslide
      11. cfpresenter
      12. cfprint
      13. cfprocessingdirective
      14. cfprocparam
      15. cfprocresult
      16. cfprogressbar
      17. cfproperty
      18. cfquery
      19. cfqueryparam
    11. Tags r-s
      1. cfregistry
      2. cfreport
      3. cfreportparam
      4. cfrethrow
      5. cfreturn
      6. cfsavecontent
      7. cfschedule
      8. cfscript
      9. cfsearch
      10. cfselect
      11. cfservlet
      12. cfservletparam
      13. cfset
      14. cfsetting
      15. cfsharepoint
      16. cfsilent
      17. cfslider
      18. cfspreadsheet
      19. cfsprydataset
      20. cfstoredproc
      21. cfswitch
    12. Tags t
      1. cftable
      2. cftextarea
      3. cftextinput
      4. cfthread
      5. cfthrow
      6. cftimer
      7. cftooltip
      8. cftrace
      9. cftransaction
      10. cftree
      11. cftreeitem
      12. cftry
    13. Tags u-z
      1. cfupdate
      2. cfwddx
      3. cfwebsocket
      4. cfwindow
      5. cfxml
      6. cfzip
      7. cfzipparam
  4. CFML Reference
    1. Reserved words and variables
      1. Reserved words and variables
      2. Reserved words
      3. Scope-specific built-in variables
      4. Custom tag variables
      5. ColdFusion tag-specific variables
      6. CGI environment (CGI Scope) variables
    2. Ajax JavaScript functions
      1. Ajax JavaScript functions
      2. Function summary Ajax
      3. ColdFusion.Ajax.submitForm
      4. ColdFusion.Autosuggest.getAutosuggestObject
      5. ColdFusion.Layout.enableSourceBind
      6. ColdFusion.MessageBox.getMessageBoxObject
      7. ColdFusion.ProgressBar.getProgressBarObject
      8. ColdFusion.MessageBox.isMessageBoxDefined
      9. JavaScriptFunctionsinColdFusion9Update1
    3. ColdFusion ActionScript functions
      1. ColdFusion ActionScript functions
      2. CF.http
      3. CF.query
    4. ColdFusion mobile functions
      1. ColdFusion Mobile Functions
      2. Accelerometer Functions
      3. Camera Functions
      4. Connection Functions
      5. Contact Functions
      6. Event Functions
      7. File System Functions
      8. Geolocation Functions
      9. Media and Capture Functions
      10. Notification Functions
      11. Splash Screen Functions
      12. Storage Functions
    5. Application.cfc reference
      1. Application.CFC reference
      2. Application variables
      3. Method summary
      4. onAbort
      5. onApplicationEnd
      6. onApplicationStart
      7. onMissingTemplate
      8. onCFCRequest
      9. onError
      10. onRequestEnd
      11. onRequest
      12. onRequestStart
      13. onServerStart
      14. onSessionEnd
      15. onSessionStart
    6. Script functions implemented as CFCs
      1. Script Functions Implemented as CFCs
      2. Accessing the functions
      3. Function summary
      4. ftp
      5. http
      6. mail
      7. pdf
      8. query
      9. Script functions implemented as CFCs in ColdFusion 9 Update 1
      10. storedproc
    7. ColdFusion Flash Form style reference
      1. Styles valid for all controls
      2. Styles for cfform
      3. Styles for cfformgroup with horizontal or vertical type attributes
      4. Styles for box-style cfformgroup elements
      5. Styles for cfformgroup with accordion type attribute
      6. Styles for cfformgroup with tabnavigator type attribute
      7. Styles for cfformitem with hrule or vrule type attributes
      8. Styles for cfinput with radio, checkbox, button, image, or submit type attributes
      9. Styles for cftextarea tag and cfinput with text, password, or hidden type attributes
      10. Styles for cfselect with size attribute value of 1
      11. Styles for cfselect with size attribute value greater than 1
      12. Styles for cfcalendar tag and cfinput with dateField type attribute
      13. Styles for the cfgrid tag
      14. Styles for the cftree tag
      15. ColdFusion Flash Form Style Reference
    8. ColdFusion event gateway reference
      1. ColdFusion Event Gateway reference
      2. addEvent
      3. CFEvent
      4. CFEventclass
      5. Constructor
      6. Gateway development interfaces and classes
      7. getStatus
      8. setCFCPath
      9. setCFCMethod
      10. getOriginatorID
      11. getLogger
      12. getBuddyList
      13. getBuddyInfo
      14. IM gateway message sending commands
      15. IM Gateway GatewayHelper class methods
      16. onIncomingMessage
      17. onIMServerMessage
      18. onBuddyStatus
      19. onAddBuddyResponse
      20. onAddBuddyRequest
      21. IM Gateway CFC incoming message methods
      22. IM gateway methods and commands
      23. CFML CFEvent structure
      24. warn
      25. info
      26. setOriginatorID
      27. data command
      28. submit Multi command
      29. submit command
      30. setGatewayType
      31. setGatewayID
      32. setData
      33. setCFCListeners
      34. outgoingMessage
      35. getStatusTimeStamp
      36. numberOfMessagesReceived
      37. numberOfMessagesSent
      38. removeBuddy
      39. removeDeny
      40. removePermit
      41. setNickName
      42. setPermitMode
      43. setStatus
      44. SMS Gateway CFEvent structure and commands
      45. SMS Gateway incoming message CFEvent structure
      46. getStatusAsString
      47. getProtocolName
      48. getPermitMode
      49. getPermitList
      50. getNickName
      51. getName
      52. getDenyList
      53. getCustomAwayMessage
      54. getQueueSize
      55. getMaxQueueSize
      56. getHelper
      57. getGatewayType
      58. getGatewayServices
      59. getGatewayID_1
      60. getGatewayID
      61. getData
      62. getCFCTimeout
      63. setCFCTimeout
      64. getCFCPath
      65. getCFCMethod
      66. GatewayServices class
      67. Gateway interface
      68. GatewayHelper interface
      69. addPermit
      70. addDeny
      71. addBuddy
      72. error
      73. debug
      74. Logger class
      75. stop
      76. start
      77. CFML event gateway SendGatewayMessage data parameter
      78. restart
      79. fatal
      80. SMS gateway message sending commands
    9. ColdFusion C++ CFX Reference
      1. C++ class overview
      2. Deprecated class methods
      3. CCFXException class
      4. CCFXQuery class
      5. CCFXRequest class
      6. CCFXStringSet class
      7. ColdFusion C++ CFX Reference
    10. ColdFusion Java CFX reference
      1. ColdFusion Java CFX reference
      2. Class libraries overview
      3. Custom tag interface
      4. Query interface
      5. Request interface
      6. Response interface
      7. Debugging classes reference
    11. WDDX JavaScript Objects
      1. WDDX JavaScript objects
      2. JavaScript object overview
      3. WddxRecordset object
      4. WddxSerializer object
  5. Cloud services
    1. ColdFusion and GCP Storage
    2. ColdFusion and GCP Firestore
    3. ColdFusion and GCP PubSub
    4. ColdFusion and Amazon S3
    5. ColdFusion and DynamoDB
    6. ColdFusion and Amazon SQS
    7. ColdFusion and Amazon SNS
    8. ColdFusion and MongoDB
    9. ColdFusion and Azure Blob
    10. ColdFusion and Azure Service Bus
    11. Multi-cloud storage services
    12. Multi-cloud RDS databases
    13. ColdFusion and Azure Cosmos DB

 

Description

Converts ColdFusion data into a JSON (JavaScript Object Notation) representation of the data.

Returns

A string that contains a JSON representation of the parameter value.

Prior to 2018 release of ColdFusion, when handling the serialization of Strings ColdFusion checks whether it is of any of Boolean values (“yes”, “no”,”true”, “false”) or a numeric value (for e.g. “100”, “0.125”) converts to them to respective JSON Boolean or JSON Number.  From 2018 onwards ColdFusion doesn’t do this check and treats them as valid Strings and converts them to JSON String (value inside double quotes).

For more information, see Charlie Arehart's blog.

Category

Syntax

SerializeJSON(data[, queryFormat[, useSecureJSONPrefix[, useCustomSerializer]]])

See also

DeserializeJSON IsJSON cfajaxproxy Using data interchange formats in the Developing ColdFusion Applicationshttp://www.json.org

History

ColdFusion (2018 release): Introduced named parameters.

ColdFusion (2016 release) Update 2: Added support for struct and array serialization using getMetadata.

ColdFusion 11: Added new parameters: useSecureJSONPrefix and useCustomSerializer.

ColdFusion 8: Added function

Parameters

Parameter

Description

data

A ColdFusion data value or variable that represents one.

queryFormat

This parameter can be a Boolean value that specifies how to serialize ColdFusion queries or a string with possible values "row", "column", or "struct".

useSecureJSONPrefix

False by default. When Prefix Serialized JSON is enabled in the ColdFusion Administrator, then by default this function inserts the secure json prefix at the beginning of the json .

useCustomSerializer

true/false. Whether to use the customSerializer or not. The default value is true. Note that the custom serialize will always be used for serialization. If false, the JSON serialization will be done using the default ColdFusion behavior.

Usage

This function is useful for generating JSON format data to be consumed by an Ajax application.The SerializeJSON function converts ColdFusion dates and times into strings that can be easily parsed by the JavaScript Date object. The strings have the following format:

MonthName, DayNumber Year Hours:Minutes:Seconds

The SerializeJSON function converts the ColdFusion date time object for October 3, 2007 at 3:01 PM, for example, into the JSON string "October, 03 2007 15:01:00".The SerializeJSON function with a false serializeQueryByColumns parameter (the default) converts a ColdFusion query into a row-oriented JSON Object with the following elements:

Element

Description

COLUMNS

An array of the names of the columns.

DATA

A two-dimensional array, where:

  • Each entry in the outer array corresponds to a row of query data.
  • Each entry in the inner arrays is a column field value in the row, in the same order as the COLUMNS array entries.

For example, the SerializeJSON function with a serializeQueryByColumns parameter value of false converts a ColdFusion query with two columns, City, and State, and two rows of data into following format:

{"COLUMNS":["CITY","STATE"],"DATA":[["Newton","MA"],["San Jose","CA"]]}

The SerializeJSON function with a serializeQueryByColumns parameter value of true converts a ColdFusion query into a column-oriented JSON Object that is equivalent to the WDDX query representation. The JSON Object has three elements:

Element

Description

ROWCOUNT

The number of rows in the query.

COLUMNS

An array of the names of the columns.

DATA

An Object with the following:

  • The keys are the query column names
  • The values are arrays that contain the column data

For example, the SerializeJSON function with a serializeQueryByColumns parameter value of false converts a ColdFusion query with two columns, City, and State, and two rows of data into following format:

{"ROWCOUNT":2, "COLUMNS":["CITY","STATE"],"DATA":{"City":["Newton","San Jose"],"State":["MA","CA"]}}
Note:

The SerializeJSON function generates an error if you try to convert binary data into JSON format.

The SerializeJSON function converts all other ColdFusion data types to the corresponding JSON types. It converts structures to JSON Objects, arrays to JSON Arrays, numbers to JSON Numbers, and strings to JSON Strings.

Note:

ColdFusion internally represents structure key names using all-uppercase characters, and, therefore, serializes the key names to all-uppercase JSON representations. Any JavaScript that handles JSON representations of ColdFusion structures must use all-uppercase structure key names, such as CITY or STATE. You also use the all-uppercase names COLUMNS and DATA as the keys for the two arrays that represent ColdFusion queries in JSON format.

Serialize a struct

In ColdFusion, the cases for struct keys are not preserved. The struct keys get converted to upper case automatically.

For example, in the following code snippet, the keys in the output are converted to upper case by default. 

<cfscript> 
    data = {empName="James", age="26"}; 
    serializedStr = serializeJSON(data); 
    writeoutput(serializedStr); 
</cfscript> 

Output

{"EMPNAME":"James","AGE":"26"}

If you need to preserve the case of the keys at the application level, modify the following setting in application.cfc.

this.serialization.preservecaseforstructkey = true

With the application.cfc now containing the setting,

component 
{ 
    this.name='serializeJSON'
    this.serialization.preservecaseforstructkey = true
} 

If you re-run the snippet, you’ll see the following output:

{"empName":"James","age":"26"}

Enable case preservation at the server level

To enable case preservation of struct keys at the server level, perform the following:

  1. In the ColdFusion Administrator page, select Server Settings > Settings.
  2. Select Preserve case for Struct keys for Serialization.

Note that this setting is used during compilation of the CFML page and therefore if this flag is changed (in the administrator or programmatically), any pages relying on the change must be recompiled. This is done typically by simply editing the file (make any change at all) and re-executing it. If "trusted cache" is enabled in the ColdFusion Administrator, you must clear the template cache (of at least those affected files), which can also be done from within the ColdFusion Administrator Caching page. 

Serialize a query

The serializeJSON function converts a ColdFusion query into a row-oriented JSON Object with the following elements:

Element Description
COLUMNS An array of the names of the columns.

DATA

 

 

A two-dimensional array, where:

  • Each entry in the outer array corresponds to a row of query data.

  • Each entry in the inner arrays is a column field value in the row, in the same order as the COLUMNS array entries.

For example, the SerializeJSON function with a serializeQueryByColumns parameter value of false converts a ColdFusion query with two columns, City, and State, and two rows of data into the following format:

{"COLUMNS":["CITY","STATE"],"DATA":[["Newton","MA"],["San Jose","CA"]]}

Example 1

In this example, the code snippet uses queryFormat as a row. The output that the snippet produces has the data in the query arranged as arrays of rows.

<cfscript> 
    myquery=QueryNew([  
            {"Id":101,"Name":"John Adams","Paid":FALSE},  
            {"Id":102,"Name":"Samuel Jackson","Paid":TRUE},  
            {"Id":103,"Name":"Jack Michaels","Paid":TRUE},  
            {"Id":104,"Name":"Tony Stark","Paid":FALSE}  
    ])  
    //writeDump(myquery) 
    serializedQuery=serializeJSON(data=myquery,queryformat="row") 
    writeOutput(serializedQuery) 
</cfscript> 

Output

{"COLUMNS":["PAID","ID","NAME"],"DATA":[[false,101,"John Adams"],[true,102,"Samuel Jackson"],[true,103,"Jack Michaels"],[false,104,"Tony Stark"]]}

Example 2

In this example, the code snippet uses queryFormat as column. The snippet's output produces data in arrays associated with its row.

<cfscript> 
    myquery=QueryNew([  
            {"Id":101,"Name":"John Adams","Paid":FALSE},  
            {"Id":102,"Name":"Samuel Jackson","Paid":TRUE},  
            {"Id":103,"Name":"Jack Michaels","Paid":TRUE},  
            {"Id":104,"Name":"Tony Stark","Paid":FALSE}  
    ])  
    //writeDump(myquery) 
    serializedQuery=serializeJSON(data=myquery,queryformat="column") 
    writeOutput(serializedQuery) 
</cfscript> 

Output

{"ROWCOUNT":4,"COLUMNS":["PAID","ID","NAME"],"DATA":{"PAID":[false,true,true,false],"ID":[101,102,103,104],"NAME":["John Adams","Samuel Jackson","Jack Michaels","Tony Stark"]}}

Example 3

In this example, the code snippet uses queryFormat as struct. The output the snippet produces has the data as an array of structs.

<cfscript> 
    myquery=QueryNew([  
            {"Id":101,"Name":"John Adams","Paid":FALSE},  
            {"Id":102,"Name":"Samuel Jackson","Paid":TRUE},  
            {"Id":103,"Name":"Jack Michaels","Paid":TRUE},  
            {"Id":104,"Name":"Tony Stark","Paid":FALSE}  
    ])  
    //writeDump(myquery) 
    serializedQuery=serializeJSON(data=myquery,queryformat="struct") 
    writeOutput(serializedQuery) 
</cfscript> 

Output

[{"PAID":false,"ID":101,"NAME":"John Adams"},{"PAID":true,"ID":102,"NAME":"Samuel Jackson"},{"PAID":true,"ID":103,"NAME":"Jack Michaels"},{"PAID":false,"ID":104,"NAME":"Tony Stark"}]

Serialize a datetime

The SerializeJSON function converts ColdFusion dates and times into strings that can be easily parsed by the JavaScript Date object. The strings have the following format: 

MonthName, DayNumber Year Hours:Minutes:Seconds

The SerializeJSON function converts the ColdFusion date time object for October 3, 2023 at 3:01 PM, for example, into the JSON string "October, 03 2023 15:01:00". 

Example

<cfscript> 
    currentdate = now() 
    datetimeobj = arrayNew(1) 
    datetimeobj[1] = currentdate 
    datetimeobj[2] = "8/11/2006" 
    datetimeobj[3] = CreateDate(2006,8,11) 
    datetimeobj[4] = CreateDateTime(2006,8,11,15,30,30) 
    datetimeobj[5] = CreateODBCDate(datetimeobj[4]) 
    datetimeobj[5] = CreateODBCDateTime(datetimeobj[4]) 
    // table in a loop 
    writeOutput('<table border="1">'); 
    writeOutput('<tr><th>Input Date/Time value</th><th>JSON representation</th></tr>'); 
    for (i=1;i<=arrayLen(datetimeobj);i++){ 
        jsonstring = serializeJSON(datetimeobj[i]) 
        writeOutput('<tr>') 
        writeOutput('<td>#datetimeobj[i]#</td>') 
        writeOutput('<td>#jsonstring#</td>') 
        writeOutput('</tr>') 
    } 
    // Close the table HTML 
    writeOutput('</table>') 
</cfscript> 

Output

Serialize Null

Null is an important construct in modern programming languages, which improves language interoperability with other tech stack and programming languages.

Before the 2018 release of ColdFusion, a null returned from an external service was converted to an empty string. Therefore, if you were to code for null or make decisions based on null value in your ColdFusion applications, there was no inherent way to achieve this.

To introduce a Null value, you either had to assign an empty value or use javacast to force a null value. 

Earlier, you’d use the following:

<cfscript> 
    response={} 
    response.result="Success" 
    response.error="Error" 
    //writeDump(response) 
    response.error=javacast("null","") 
    serializedResponse = serializeJSON(response) 
    writeOutput(serializedResponse) 
</cfscript> 

Output

{"error":null,"result":"Success"}

In the 2018 release of ColdFusion, we introduced a setting this.enableNullSupport = true in Application.cfc. If you enable this option, you’ll ssign a null value to a variable or a struct key.

Example

Application.cfc

component 
{ 
    this.name='serializeJSON'; 
    this.serialization.preservecaseforstructkey = true 
    this.enableNullSupport = true 
} 

File.cfm

<cfscript> 
    response={} 
    response.result="Success" 
    response.error="Error" 
    //writeDump(response) 
    //response.error=javacast("null","") 
    response.error=null 
    serializedResponse = serializeJSON(response) 
    writeOutput(serializedResponse) 
</cfscript> 

Output

{"error":null,"result":"Success"}

Data type preservation

The ColdFusion language is typeless and does not evaluate or preserve the type information at the time of code generation. At runtime, ColdFusion tries to make its best guess to determine the datatype, which may cause some unexpected behavior. For example, at the time of JSON serialization, ColdFusion attempts at converting a string to a number. If the attempt is successful, then the passed data type is treated as number irrespective of whether you wanted it to be a string or not.

Starting from ColdFusion 11, the data type is preserved during the code execution time for Query and CFCs.

SerializeJSON considers datatypes defined in the database for serialization. If the database defines a column as a string, any number inserted into the column will still be treated as a string by SerializeJSON.

For instance,

<cfquery name="qry_Users" datasource="#DSN#">
select * from users
</cfquery>
<cfoutput>#SerializeJSON(qry_Users)#</cfoutput><br>

Serializing query

SerializeJSON honors the datatypes of columns defined in the database. The same would work for in-memory queries created using QueryNew() as long as the datatype is specified for the columns. 

Consider the CFC property type example:

Employee.cfc

Component accessors="true"
{
property string empName;
property numeric age;
property string dept;
}

Index.cfm

<cfscript>
emp = new Employee({empName="James", age=26, dept="000"});
writeOutput(SerializeJSON(emp));
</cfscript>

OUTPUT: {"dept":"000","empName":"James","age":26}

In the previous version of ColdFusion, 000 will be automatically coverted to a number at runtime.

Additional format for query serialization

ColdFusion 10 supports 2 different ways to serialize a query object to a JSON string:

  • Using row
  • Using column

However, these 2 types are not the easiest to use with AJAX applications. ColdFusion 11 introduces a new way to serialize a query object to a JSON string:

  • Using struct

All the 3 ways, can be defined at the application-level and will be used in serialized JSON functions if the type is not defined explicitly. In application.cfc, define:

this.serialization.serializeQueryAs = [row|column|struct]

Note that "struct" is also available to be accessible through an AJAX argument. Now you can pass struct  in an AJAX URL to serialize a query object as struct.

If you are calling CFC via URL, then you must specify queryformat=struct.

ColdFusion 11 now supports serializing the query object to a JSON string that is AJAX-friendly:

[
{"colour":"red","id":1},
{"colour":"green","id":2},
{"colour":"blue","id":3}
]

The current SerializeJSON function has been enhanced to support the 'key-value' format.

SerializeJSON( Object o, Object serializeQueryByColumns, boolean secure, boolean useCustomSerializer);

If you are using the serialzeQueryAs property in application.cfc, you do not need to specify the serialzeQueryByColumns property unless you need to override the functionality.

Custom serializers

In the application.cfc file, you can register your own handler for serializing and deserializing the complex types. If the serializer is not specified, ColdFusion uses the default mechanism for serialization. For more information see Support for pluggable serializer and deserializer.

Serializing structs

Adobe ColdFusion (2016 release) Update 2 enables you to specify the datatype information for keys in a struct. This is known as metadata.

Before you get started on setting the metadata, familiarize yourself with the attributes used in a metadata. The table below lists the metadata attributes:

Attribute

Description

Type

The datatype of the struct key.

Name

While serializing a key in a struct, instead of using the key name as JSON key, the specified name in this is used.

Keys

A struct that contains metadata information for nested structs.

Items

Array of datatypes when setting the metadata for serializing elements in arrays or arrays inside structs.

Ignore

When “true”, ignores specified keys in struct . Default is “false”.

<cfscript>
       example = structnew();
       example.firstname = "Yes";
       example.lastname = "Man";
       // Default serialization converting ctring Yes to true
       writeoutput(SerializeJSON(example));
</cfscript>

In the output below, you can see that the value of the key FIRSTNAME has been serialized to true (Boolean value), due to the absence of information on datatype .

{"LASTNAME":"Man","FIRSTNAME":true}

Use the struct function, setMetadata, to specify the metadata.

The metadata is a struct where each key is struct key and the value of each key specifies the information on how to serialize in JSON.

The value of the key can be a string or a struct.

Value as string

metadata = {firstname: "string"}};

Value as struct

metadata = {firstname: {type: "string"}};

The datatype values are string, numeric, integer, boolean, date, array, and struct.

<cfscript>
       example = structnew();
       example.firstname = "Yes";
       example.lastname = "Man";
       // changing the default serialization by specifying the type of "firstname" as string
       metadata = {firstname: {type:"string"}};
       example.setMetadata(metadata);
       writeoutput(SerializeJSON(example));
</cfscript>

You can see that the value of the key FIRSTNAME is "Yes", which is the desired output.

{"LASTNAME":"Man","FIRSTNAME":"Yes"}

In addition to passing the type info at struct level, you can also define the metadata in Application.cfc, as shown below:

this.serialization.structmetadata={firstname: {type:"string",name:"fname"},lastname:{name:"lname"}};

If defined as above, you need not define the datatype for firstname for the values that contains this key. For more information, see Application.cfc variables.

Note:

At runtime, if the metadata of the struct is not passed at struct level but is defined at the application level, then the application-level metadata is used for serializing the struct.  But if you define the metadata in the struct, then the metadata at struct level takes priority over the one defined in Application.cfc

When you serialize a struct to JSON, the struct keys always appear in upper case. You can change this by specifying the exact name of the key in the struct, as shown below:

<cfscript>
       example = structnew();
       example.firstname = "Yes";
       example.lastname = "Man";
       writeoutput("<b>After serialization</b>:");
       // change the JSON key firstname to fname 
       metadata = {firstname: {type:"string",name:"fname"}};
       example.setMetadata(metadata);
       writeoutput(SerializeJSON(example));
</cfscript>

In the output below, you can see the the key FIRSTNAME has changed to fname.

{"LASTNAME":"Man","fname":"Yes"}

If the metadata is not specified for a key in the struct, default serialization is applied.

Serialization in nested structs

A struct can have nested structs. There are two ways of specifying the metadata for a key whose value is a struct.

Setting the metadata of a struct key on the parent struct

Specify the metadata for a key whose value is a struct in a struct. The struct can contain the metadata for the keys existing in the nested struct. If you do not specify the metadata for such key asstruct, the ColdFusion checks if there is any metadata set explicitly on the nested struct. If yes, the metadata in the nested struct is honored and is used for serializing the nested struct.

If there is no metadata in both nested struct and parent struct, then ColdFusion default serialization is applied for the nested structs.

For example,

<cfscript>
       employee = structnew();
       // define the struct key-value pairs
       employee.firstname = "Yes";
       employee.lastname = "Man";
       // define a nested struct for the key address
       employee.address = {"doorno": "148", "street":"10 Down Street", "country": "UK"};
       metadata = {firstname: {type: "string", name: "fname"}, address: {keys:
       // set the metadata for a key in the nested struct
       {
             "doorno": {type: "string", name: "DoorNo"},
             "street": "string",
             "country": "string"
       }}};
       employee.setmetadata(metadata);
       writeoutput(SerializeJSON(employee));
</cfscript>

The output is:

{"LASTNAME":"Man","ADDRESS":{"country":"UK","DoorNo":"148","street":"10 Down Street"}," fname ":"Yes"}

The above situation is beneficial when, for example, an employee struct contains a physical address. The DoorNo key, in the above example, is specified as 148. But the DoorNo key can also contain alphanumeric values (148a,148-a, and so on). In such cases, the example above serializes the DoorNo key as string.

{"LASTNAME":"Man","ADDRESS":{"country":"UK","DoorNo":"148-a","street":"10 Down Street"}," fname ":"Yes"}

Set the metadata for the key DoorNo as string. The metadata for the inner struct should be specified as a struct and should be in a key called keys. 

Setting metadata on the nested struct using setMetadata function

If both parent and nested structs have metadata, then the parent's metadata is considered for serialization. For example,

<cfscript>
       employee = structnew();
       employee.firstname = "Yes";
       employee.lastname = "Man";
       employee.address = {"doorno": "148", "street":"10 Downing Street", "country": "UK"};
       employee.address.setmetadata({"doorno": {type: "string", name: "DoorNo"},"street": "string","country": "string"});
 
       // changing the default serialization by specifying the type of firstname as string and
       // changing JSON key firstname to fname
       metadata = {firstname: {type: "string", name: "fname"}};
       employee.setmetadata(metadata);
       writeoutput(SerializeJSON(employee));
</cfscript>

The output is:

{"LASTNAME":"Man","ADDRESS":{"country":"UK","DoorNo":"148","street":"10 Downing Street"}," fname ":"Yes"}

When serializing the address key in the employee struct and if the employee struct does not have any metadata for it, CodlFusion checks if there is any metadata set in the address struct. If there is metadata defined, the metadata is utilized for serialization, else default serialization happens.

Serializing an array inside a struct

A ColdFusion struct can contain an array representing a key. The array can contain values of different datatypes.

If the elements in the array have the same type, specify the datatypes as a struct with the keys having the values of the datatype. For example,

{title: {type:"string",name:"title"}, tags:{items:"string",name:"keywords"}};

The code sample below illustrates serialization of an array inside a struct.

<cfscript>
       blogPost = structnew();
       blogPost.Title = "Struct Serialization";
       blogPost.referenceURL = "http://www.example.com";
       // define an array for a struct key. In the array all elements are of type string, except 2016
       blogPost.tags = ["struct", "json", "serialization", "2016", "HF2", "metadata"];
       // specify all elements as string in the metadata
       metadata = {title: {type: "string", name: "title"}, tags: {items: "string", name: "keywords"},referenceURL:{name:"url"}};
       blogPost.setmetadata(metadata);
       writeoutput(SerializeJSON(blogPost));
</cfscript>

The output using default JSON serialization is as follows:

{"TITLE":"Struct Serialization","TAGS":["struct","json","serialization",2016,"HF2","metadata"],"REFERENCEURL":"http://www.example.com"}

All values inside the TAGS array get serialized as string except 2016 which gets serialized as numeric, which is not the desired output.

After specifying the metadata for TAGS array as specifieid in the sample above, the output is shown below:

{"title":"Struct Serialization","keywords":["struct","json","serialization","2016","HF2","metadata"],"url":"http://www.example.com"}

If an array contains values of different datatypes, assign the array of values specifying the metadata of each array element to the key items. For example,

<cfscript>
       example = structnew();
       example.firstname = "Yes";
       example.lastname = "Man";
       // define an array for a struct key. Elements are of different datatypes
       example.inputs = ["2500.12", 4.0, "Yes", "False", "339090", {"q1": "Yes"}, ["1","2","3"]];
       // set datatypes of first element as numeric, second element as integer, and so on
       example.setmetadata({firstname: "string", inputs: {items: ["numeric", "integer", "string", "boolean", "string", 
       {q1: "boolean"}, {items: "string"}]}});
       writeoutput(serializeJSON(example));
</cfscript>

The output is:

{"LASTNAME":"Man","FIRSTNAME":"Yes","INPUTS":[2500.12,4,"Yes",false,"339090",{"q1":true},["1","2","3"]]}

In the above sample, the inputs array also contains a struct and an array as elements. In such cases, the metadata can be specified on the metadata of inputs array.

Ignoring keys in a struct

You can ignore certain keys in a struct that need not be serialized. Specify the key ignore and set its value to true, as shown below:

{key:{ignore:true}}

For example,

<cfscript>
       employee = structnew();
       employee.firstname = "Yes";
       employee.lastname = "Man";
       employee.salary = "100000";
       employee.salarygrade = "D";
       // ignore salary and salarygrade keys
       profileView = {firstname: {type:"string",name:"fname"}, salary: {ignore: true}, salarygrade: {ignore: true}};
       employee.setmetadata(profileView);
       writeoutput(serializeJSON(employee));
</cfscript>

The output is:

{"LASTNAME":"Man","fname":"Yes"}

The salary and salarygrade keys are ignored, while the other keys are serialized, according to the metadata.

Retrieving metadata

You can retrieve metadata using the getMetadata function. In structs, this function provides the metadata information for the struct keys in addition to the type of struct (ordered or unordered). For example, 

<cfscript>
    employee = structnew();
    employee.firstname = "Yes";
    employee.lastname = "Man";
    employee.salary = "100000";
    employee.salarygrade = "D";
    profileView = {firstname: {type:"string",name:"fname"}, salary: {ignore: true}, salarygrade: {ignore: true}};
    employee.setmetadata(profileView);
    writedump(employee.getMetadata());
</cfscript>

The sample produces the following output:

setMetadata output
setMetadata output

The returned metadata contains a key called keys that contains the metadata set on the struct. There is a second key ordered that returns if the struct is ordered or unordered

Note: For ordered structs, the value of the key ordered is insertion.

Serializing arrays

Adobe ColdFusion (2016 release) Update 2 introduces setting metadata for an array. You can use the setMetadata function to set the metadata on the array. 

If all the items in the array have the same datatype, you can specify the datatype of the values as a struct with the key items with the value of the datatype in  string .

For example, without serialization:

<cfscript>
       tags  = ["struct", "json", "serialization", "2016", "HF2", "metadata"];
       WriteOutput(serializejSON(tags));
</cfscript>

The sample produces the following output:

["struct"," json ","serialization",2016,"HF2","metadata"]

Due to lack of datatype information, the string 2016 gets converted into a numeric value. The folllowing sample illustrates metadata set in the array:

<cfscript>
       tags  = ["struct", "json", "serialization", "2016", "HF2", "metadata"];
       tags.setmetadata({items: "string"});
       writeoutput(serializejSON(tags));
</cfscript>

The output is shown below:

["struct"," json ","serialization","2016","HF2","metadata"]

If the array contains values of different datatypes, specify the datatypes as an array in the metadata. For example,

myArray=["ColdFusion",2016,"true"];

myArray.setMetadata({items:["string","integer","boolean"]});

In the sample below,

<cfscript>
       inputs = ["2500.12", 4.0, "Yes", "False", "339090", {"q1": "Yes"}, ["1","2","3"]];
       inputs.setmetadata({items: ["string", "integer", "string", "boolean", "string", {q1: "string"}, {items: "string"}]});
       writeoutput(serializeJSON(inputs));
</cfscript>

["2500.12",4,"Yes",false,"339090",{"q1":"Yes"},["1","2","3"]]

If the array contains a struct or an array, you can specify its respective metadata. If you do not specify the inner array or struct metadata, ColdFusion checks if there is any metadata explicitly defined on the array or struct. If yes, ColdFusion uses the metadata defined explicitly in the array or struct.

Retrieving metadata

Use the getMetadata function to view the metadata information of the array in addition to the array type (synchronized or unsynchronized). For example,

<cfscript>
    inputs = ["2500.12", 4.0, "Yes", "False", "339090", {"q1": "Yes"}, ["1","2","3"]];
    inputs.setmetadata({items: ["string", "integer", "string", "boolean", "string", {q1: "string"}, {items: "string"}]});
    writedump(inputs.getMetadata());
</cfscript>

The sample produces the following output:

getMetadata output
getMetadata output

The returned metadata contains the metadata set on the array. The items key contains the metadata of th eitems in the array. The type key contains information whether the array is synchronized or unsynchronized.

Get help faster and easier

New user?