Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can JSON field names start with a number?

I have this JSON conversion to XML issue I'm trying to figure out and am not sure whether it's a JSON issue or a conversion to XML issue.

{
  "AutomaticRenewalFlag" : "false",
  "2ndTierCeid" : "7rfqz",
  "BillingFrequency" : "12"
}

Is the second field here valid (2ndTierCeid) as far as JSON goes?

I'm getting the following error in the app we're using:

Failed to transform JSON, error was: java.io.IOException: org.xml.sax.SAXParseException: The content of elements must consist of well-formed character data or markup.

like image 299
Josh E Avatar asked Sep 15 '25 07:09

Josh E


1 Answers

Short answer: JSON field names may begin with a number; XML element names may not.


Details

JSON has no restrictions unique to the first character of a member string,

member ::= ws string ws ':' element

string ::= '"' characters '"'

characters ::= "" | character characters

character ::= '0020' . '10FFFF' - '"' - '\' | '\' escape

but XML does not allow tag names to begin with a number:

Name          ::= NameStartChar (NameChar)*
NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] |
                  [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] |
                  [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] |
                  [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] |
                  [#x10000-#xEFFFF]
NameChar      ::= NameStartChar | "-" | "." | [0-9] | #xB7 |
                  [#x0300-#x036F] | [#x203F-#x2040]

Therefore, you'll have to restrict your JSON to not begin with a number if you wish there to be an unmodified mapping of JSON keys to XML tag names.

like image 174
kjhughes Avatar answered Sep 17 '25 00:09

kjhughes