Package net.sf.json.xml
Class XMLSerializer
- java.lang.Object
-
- net.sf.json.xml.XMLSerializer
-
public class XMLSerializer extends java.lang.ObjectUtility class for transforming JSON to XML an back.
When transforming JSONObject and JSONArray instances to XML, this class will add hints for converting back to JSON.
Examples:
JSONObject json = JSONObject.fromObject("{\"name\":\"json\",\"bool\":true,\"int\":1}"); String xml = new XMLSerializer().write( json );json true 1 JSONArray json = JSONArray.fromObject("[1,2,3]"); String xml = new XMLSerializer().write( json );1 2 3
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classXMLSerializer.CustomElementprivate classXMLSerializer.XomSerializer
-
Field Summary
Fields Modifier and Type Field Description private java.lang.StringarrayNamethe name for an JSONArray Elementprivate java.lang.StringelementNamethe name for an JSONArray's element Elementprivate static java.lang.String[]EMPTY_ARRAYprivate java.lang.String[]expandablePropertieslist of properties to be expanded from child to parentprivate booleanforceTopLevelObjectprivate booleanisEscapeLowerCharsflag for if characters lower than ' ' should be escaped in texts.private booleanisKeepCDataflag for if text with CDATA should keep the information in the value or notprivate booleanisPerformAutoExpansionflag for performing auto-expansion of arrays ifprivate static java.lang.StringJSON_PREFIXprivate booleankeepArrayNameflag for if array name should be kept in JSON dataprivate static org.apache.commons.logging.Loglogprivate booleannamespaceLenientflag to be tolerant for incomplete namespace prefixesprivate java.util.MapnamespacesPerElementMap of namespaces per elementprivate java.lang.StringobjectNamethe name for an JSONObject Elementprivate booleanremoveNamespacePrefixFromElementsflag for trimming namespace prefix from element nameprivate java.lang.StringrootNamethe name for the root Elementprivate java.util.MaprootNamespaceMap of namespaces for root elementprivate booleanskipNamespacesflag for skipping namespaces while readingprivate booleanskipWhitespaceflag for skipping whitespace elements while readingprivate booleansortPropertyNamesflag for sorting object properties by nameprivate booleantrimSpacesflag for trimming spaces from string valuesprivate booleantypeHintsCompatibilityflag for type hints naming compatibilityprivate booleantypeHintsEnabledflag for adding JSON types hints as attributes
-
Constructor Summary
Constructors Constructor Description XMLSerializer()Creates a new XMLSerializer with default options.
objectName: 'o'arrayName: 'a'elementName: 'e'typeHinstEnabled: truetypeHinstCompatibility: truenamespaceLenient: falseexpandableProperties: []skipNamespaces: falseremoveNameSpacePrefixFromElement: falsetrimSpaces: falseexpandableProperties: []skipWhitespace: falseperformAutoExpansion: falsekeepCData: falseescapeLowerChars: falsekeepArrayName: false
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private java.lang.StringaddJsonPrefix(java.lang.String str)voidaddNamespace(java.lang.String prefix, java.lang.String uri)Adds a namespace declaration to the root element.voidaddNamespace(java.lang.String prefix, java.lang.String uri, java.lang.String elementName)Adds a namespace declaration to an element.
If the elementName param is null or blank, the namespace declaration will be added to the root element.private voidaddNameSpaceToElement(nu.xom.Element element)private booleancanAutoExpand(JSONArray array)Only perform auto expansion if all children are objects.private booleancheckChildElements(nu.xom.Element element, boolean isTopLevel)voidclearNamespaces()Removes all namespaces declarations (from root an elements).voidclearNamespaces(java.lang.String elementName)Removes all namespace declarations from an element.
If the elementName param is null or blank, the declarations will be removed from the root element.java.lang.StringgetArrayName()Returns the name used for JSONArray.private java.lang.StringgetClass(nu.xom.Element element)java.lang.StringgetElementName()Returns the name used for JSONArray elements.java.lang.String[]getExpandableProperties()Returns a list of properties to be expanded from child to parent.java.lang.StringgetObjectName()Returns the name used for JSONArray.java.lang.StringgetRootName()Returns the name used for the root element.private java.lang.StringgetType(nu.xom.Element element)private java.lang.StringgetType(nu.xom.Element element, java.lang.String defaultType)private booleanhasNamespaces(nu.xom.Element element)private booleanisArray(nu.xom.Element element, boolean isTopLevel)private booleanisCData(nu.xom.Element element)booleanisForceTopLevelObject()private booleanisFunction(nu.xom.Element element)booleanisNamespaceLenient()Returns whether this serializer is tolerant to namespaces without URIs or not.private booleanisNullObject(nu.xom.Element element)private booleanisObject(nu.xom.Element element, boolean isTopLevel)booleanisRemoveNamespacePrefixFromElements()Returns whether this serializer will remove namespace prefix from elements or not.booleanisSkipNamespaces()Returns whether this serializer will skip adding namespace declarations to elements or not.booleanisSkipWhitespace()Returns whether this serializer will skip whitespace or not.booleanisSortPropertyNames()Returns whether this serializer will sort object properties by name or not.booleanisTrimSpaces()Returns whether this serializer will trim leading and trealing whitespace from values or not.booleanisTypeHintsCompatibility()Returns true if types hints will have a 'json_' prefix or not.booleanisTypeHintsEnabled()Returns true if JSON types will be included as attributes.private nu.xom.ElementnewElement(java.lang.String name)private JSONprocessArrayElement(nu.xom.Element element, java.lang.String defaultType)private java.lang.ObjectprocessElement(nu.xom.Element element, java.lang.String type)private nu.xom.ElementprocessJSONArray(JSONArray array, nu.xom.Element root, java.lang.String[] expandableProperties)private nu.xom.ElementprocessJSONObject(JSONObject jsonObject, nu.xom.Element root, java.lang.String[] expandableProperties, boolean isRoot)private nu.xom.ElementprocessJSONValue(java.lang.Object value, nu.xom.Element root, nu.xom.Element target, java.lang.String[] expandableProperties)private JSONprocessObjectElement(nu.xom.Element element, java.lang.String defaultType)JSONread(java.lang.String xml)Creates a JSON value from a XML string.JSONreadFromFile(java.io.File file)Creates a JSON value from a File.JSONreadFromFile(java.lang.String path)Creates a JSON value from a File.JSONreadFromStream(java.io.InputStream stream)Creates a JSON value from an input stream.voidremoveNamespace(java.lang.String prefix)Removes a namespace from the root element.voidremoveNamespace(java.lang.String prefix, java.lang.String elementName)Removes a namespace from the root element.
If the elementName is null or blank, the namespace will be removed from the root element.private java.lang.StringremoveNamespacePrefix(java.lang.String name)voidsetArrayName(java.lang.String arrayName)Sets the name used for JSONArray.
Default is 'a'.voidsetElementName(java.lang.String elementName)Sets the name used for JSONArray elements.
Default is 'e'.voidsetEscapeLowerChars(boolean escape)Sets whether this serializer should escape characters lower than ' ' in texts.voidsetExpandableProperties(java.lang.String[] expandableProperties)Sets the list of properties to be expanded from child to parent.voidsetForceTopLevelObject(boolean forceTopLevelObject)voidsetKeepArrayName(boolean keepName)Sets whether this serializer should keep the XML element being an array.voidsetKeepCData(boolean keepCData)Sets whether this serializer should keep the CDATA information in the value or not.voidsetNamespace(java.lang.String prefix, java.lang.String uri)Sets the namespace declaration to the root element.
Any previous values are discarded.voidsetNamespace(java.lang.String prefix, java.lang.String uri, java.lang.String elementName)Adds a namespace declaration to an element.
Any previous values are discarded.voidsetNamespaceLenient(boolean namespaceLenient)Sets whether this serializer is tolerant to namespaces without URIs or not.voidsetObjectName(java.lang.String objectName)Sets the name used for JSONObject.
Default is 'o'.private voidsetOrAccumulate(JSONObject jsonObject, java.lang.String key, java.lang.Object value)voidsetPerformAutoExpansion(boolean autoExpansion)Sets whether this serializer should perform automatic expansion of array elements or not.voidsetRemoveNamespacePrefixFromElements(boolean removeNamespacePrefixFromElements)Sets if this serializer will remove namespace prefix from elements when reading.voidsetRootName(java.lang.String rootName)Sets the name used for the root element.voidsetSkipNamespaces(boolean skipNamespaces)Sets if this serializer will skip adding namespace declarations to elements when reading.voidsetSkipWhitespace(boolean skipWhitespace)Sets if this serializer will skip whitespace when reading.voidsetSortPropertyNames(boolean sortPropertyNames)Returns whether this serializer will sort object properties by name or not.voidsetTrimSpaces(boolean trimSpaces)Sets if this serializer will trim leading and trealing whitespace from values when reading.voidsetTypeHintsCompatibility(boolean typeHintsCompatibility)Sets whether types hints will have a 'json_' prefix or not.voidsetTypeHintsEnabled(boolean typeHintsEnabled)Sets whether JSON types will be included as attributes.private voidsetValue(JSONArray jsonArray, nu.xom.Element element, java.lang.String defaultType)private voidsetValue(JSONObject jsonObject, nu.xom.Element element, java.lang.String defaultType)private java.lang.ObjectsimplifyValue(JSONObject parent, java.lang.Object json)private java.lang.StringtrimSpaceFromValue(java.lang.String value)java.lang.Stringwrite(JSON json)Writes a JSON value into a XML string with UTF-8 encoding.java.lang.Stringwrite(JSON json, java.lang.String encoding)Writes a JSON value into a XML string with an specific encoding.
If the encoding string is null it will use UTF-8.private java.lang.StringwriteDocument(nu.xom.Document doc, java.lang.String encoding)
-
-
-
Field Detail
-
EMPTY_ARRAY
private static final java.lang.String[] EMPTY_ARRAY
-
JSON_PREFIX
private static final java.lang.String JSON_PREFIX
- See Also:
- Constant Field Values
-
log
private static final org.apache.commons.logging.Log log
-
arrayName
private java.lang.String arrayName
the name for an JSONArray Element
-
elementName
private java.lang.String elementName
the name for an JSONArray's element Element
-
expandableProperties
private java.lang.String[] expandableProperties
list of properties to be expanded from child to parent
-
forceTopLevelObject
private boolean forceTopLevelObject
-
namespaceLenient
private boolean namespaceLenient
flag to be tolerant for incomplete namespace prefixes
-
namespacesPerElement
private java.util.Map namespacesPerElement
Map of namespaces per element
-
objectName
private java.lang.String objectName
the name for an JSONObject Element
-
removeNamespacePrefixFromElements
private boolean removeNamespacePrefixFromElements
flag for trimming namespace prefix from element name
-
rootName
private java.lang.String rootName
the name for the root Element
-
rootNamespace
private java.util.Map rootNamespace
Map of namespaces for root element
-
skipNamespaces
private boolean skipNamespaces
flag for skipping namespaces while reading
-
skipWhitespace
private boolean skipWhitespace
flag for skipping whitespace elements while reading
-
trimSpaces
private boolean trimSpaces
flag for trimming spaces from string values
-
typeHintsCompatibility
private boolean typeHintsCompatibility
flag for type hints naming compatibility
-
typeHintsEnabled
private boolean typeHintsEnabled
flag for adding JSON types hints as attributes
-
isPerformAutoExpansion
private boolean isPerformAutoExpansion
flag for performing auto-expansion of arrays if
-
isKeepCData
private boolean isKeepCData
flag for if text with CDATA should keep the information in the value or not
-
isEscapeLowerChars
private boolean isEscapeLowerChars
flag for if characters lower than ' ' should be escaped in texts.
-
keepArrayName
private boolean keepArrayName
flag for if array name should be kept in JSON data
-
sortPropertyNames
private boolean sortPropertyNames
flag for sorting object properties by name
-
-
Constructor Detail
-
XMLSerializer
public XMLSerializer()
Creates a new XMLSerializer with default options.
objectName: 'o'arrayName: 'a'elementName: 'e'typeHinstEnabled: truetypeHinstCompatibility: truenamespaceLenient: falseexpandableProperties: []skipNamespaces: falseremoveNameSpacePrefixFromElement: falsetrimSpaces: falseexpandableProperties: []skipWhitespace: falseperformAutoExpansion: falsekeepCData: falseescapeLowerChars: falsekeepArrayName: false
-
-
Method Detail
-
isSortPropertyNames
public boolean isSortPropertyNames()
Returns whether this serializer will sort object properties by name or not.
-
setSortPropertyNames
public void setSortPropertyNames(boolean sortPropertyNames)
Returns whether this serializer will sort object properties by name or not.
-
addNamespace
public void addNamespace(java.lang.String prefix, java.lang.String uri)Adds a namespace declaration to the root element.- Parameters:
prefix- namespace prefixuri- namespace uri
-
addNamespace
public void addNamespace(java.lang.String prefix, java.lang.String uri, java.lang.String elementName)Adds a namespace declaration to an element.
If the elementName param is null or blank, the namespace declaration will be added to the root element.- Parameters:
prefix- namespace prefixuri- namespace urielementName- name of target element
-
clearNamespaces
public void clearNamespaces()
Removes all namespaces declarations (from root an elements).
-
clearNamespaces
public void clearNamespaces(java.lang.String elementName)
Removes all namespace declarations from an element.
If the elementName param is null or blank, the declarations will be removed from the root element.- Parameters:
elementName- name of target element
-
getArrayName
public java.lang.String getArrayName()
Returns the name used for JSONArray.
-
setArrayName
public void setArrayName(java.lang.String arrayName)
Sets the name used for JSONArray.
Default is 'a'.
-
getElementName
public java.lang.String getElementName()
Returns the name used for JSONArray elements.
-
setElementName
public void setElementName(java.lang.String elementName)
Sets the name used for JSONArray elements.
Default is 'e'.
-
getExpandableProperties
public java.lang.String[] getExpandableProperties()
Returns a list of properties to be expanded from child to parent.
-
setExpandableProperties
public void setExpandableProperties(java.lang.String[] expandableProperties)
Sets the list of properties to be expanded from child to parent.
-
getObjectName
public java.lang.String getObjectName()
Returns the name used for JSONArray.
-
setObjectName
public void setObjectName(java.lang.String objectName)
Sets the name used for JSONObject.
Default is 'o'.
-
getRootName
public java.lang.String getRootName()
Returns the name used for the root element.
-
setRootName
public void setRootName(java.lang.String rootName)
Sets the name used for the root element.
-
isForceTopLevelObject
public boolean isForceTopLevelObject()
-
setForceTopLevelObject
public void setForceTopLevelObject(boolean forceTopLevelObject)
-
isNamespaceLenient
public boolean isNamespaceLenient()
Returns whether this serializer is tolerant to namespaces without URIs or not.
-
setNamespaceLenient
public void setNamespaceLenient(boolean namespaceLenient)
Sets whether this serializer is tolerant to namespaces without URIs or not.
-
isRemoveNamespacePrefixFromElements
public boolean isRemoveNamespacePrefixFromElements()
Returns whether this serializer will remove namespace prefix from elements or not.
-
setRemoveNamespacePrefixFromElements
public void setRemoveNamespacePrefixFromElements(boolean removeNamespacePrefixFromElements)
Sets if this serializer will remove namespace prefix from elements when reading.
-
isSkipNamespaces
public boolean isSkipNamespaces()
Returns whether this serializer will skip adding namespace declarations to elements or not.
-
setSkipNamespaces
public void setSkipNamespaces(boolean skipNamespaces)
Sets if this serializer will skip adding namespace declarations to elements when reading.
-
isSkipWhitespace
public boolean isSkipWhitespace()
Returns whether this serializer will skip whitespace or not.
-
setSkipWhitespace
public void setSkipWhitespace(boolean skipWhitespace)
Sets if this serializer will skip whitespace when reading.
-
isTrimSpaces
public boolean isTrimSpaces()
Returns whether this serializer will trim leading and trealing whitespace from values or not.
-
setTrimSpaces
public void setTrimSpaces(boolean trimSpaces)
Sets if this serializer will trim leading and trealing whitespace from values when reading.
-
isTypeHintsCompatibility
public boolean isTypeHintsCompatibility()
Returns true if types hints will have a 'json_' prefix or not.
-
setTypeHintsCompatibility
public void setTypeHintsCompatibility(boolean typeHintsCompatibility)
Sets whether types hints will have a 'json_' prefix or not.
-
isTypeHintsEnabled
public boolean isTypeHintsEnabled()
Returns true if JSON types will be included as attributes.
-
setTypeHintsEnabled
public void setTypeHintsEnabled(boolean typeHintsEnabled)
Sets whether JSON types will be included as attributes.
-
read
public JSON read(java.lang.String xml)
Creates a JSON value from a XML string.- Parameters:
xml- A well-formed xml document in a String- Returns:
- a JSONNull, JSONObject or JSONArray
- Throws:
JSONException- if the conversion from XML to JSON can't be made for I/O or format reasons.
-
readFromFile
public JSON readFromFile(java.io.File file)
Creates a JSON value from a File.- Parameters:
file-- Returns:
- a JSONNull, JSONObject or JSONArray
- Throws:
JSONException- if the conversion from XML to JSON can't be made for I/O or format reasons.
-
readFromFile
public JSON readFromFile(java.lang.String path)
Creates a JSON value from a File.- Parameters:
path-- Returns:
- a JSONNull, JSONObject or JSONArray
- Throws:
JSONException- if the conversion from XML to JSON can't be made for I/O or format reasons.
-
readFromStream
public JSON readFromStream(java.io.InputStream stream)
Creates a JSON value from an input stream.- Parameters:
stream-- Returns:
- a JSONNull, JSONObject or JSONArray
- Throws:
JSONException- if the conversion from XML to JSON can't be made for I/O or format reasons.
-
removeNamespace
public void removeNamespace(java.lang.String prefix)
Removes a namespace from the root element.- Parameters:
prefix- namespace prefix
-
removeNamespace
public void removeNamespace(java.lang.String prefix, java.lang.String elementName)Removes a namespace from the root element.
If the elementName is null or blank, the namespace will be removed from the root element.- Parameters:
prefix- namespace prefixelementName- name of target element
-
setNamespace
public void setNamespace(java.lang.String prefix, java.lang.String uri)Sets the namespace declaration to the root element.
Any previous values are discarded.- Parameters:
prefix- namespace prefixuri- namespace uri
-
setNamespace
public void setNamespace(java.lang.String prefix, java.lang.String uri, java.lang.String elementName)Adds a namespace declaration to an element.
Any previous values are discarded. If the elementName param is null or blank, the namespace declaration will be added to the root element.- Parameters:
prefix- namespace prefixuri- namespace urielementName- name of target element
-
setPerformAutoExpansion
public void setPerformAutoExpansion(boolean autoExpansion)
Sets whether this serializer should perform automatic expansion of array elements or not.
-
setKeepCData
public void setKeepCData(boolean keepCData)
Sets whether this serializer should keep the CDATA information in the value or not.- Parameters:
keepCData- True to keep CDATA, false to only use the text value.
-
setEscapeLowerChars
public void setEscapeLowerChars(boolean escape)
Sets whether this serializer should escape characters lower than ' ' in texts.- Parameters:
escape- True to escape, false otherwise.
-
setKeepArrayName
public void setKeepArrayName(boolean keepName)
Sets whether this serializer should keep the XML element being an array.- Parameters:
keepName- True to include the element name in the JSON object, false otherwise.
-
write
public java.lang.String write(JSON json)
Writes a JSON value into a XML string with UTF-8 encoding.- Parameters:
json- The JSON value to transform- Returns:
- a String representation of a well-formed xml document.
- Throws:
JSONException- if the conversion from JSON to XML can't be made for I/O reasons.
-
write
public java.lang.String write(JSON json, java.lang.String encoding)
Writes a JSON value into a XML string with an specific encoding.
If the encoding string is null it will use UTF-8.- Parameters:
json- The JSON value to transformencoding- The xml encoding to use- Returns:
- a String representation of a well-formed xml document.
- Throws:
JSONException- if the conversion from JSON to XML can't be made for I/O reasons or the encoding is not supported.
-
addJsonPrefix
private java.lang.String addJsonPrefix(java.lang.String str)
-
addNameSpaceToElement
private void addNameSpaceToElement(nu.xom.Element element)
-
checkChildElements
private boolean checkChildElements(nu.xom.Element element, boolean isTopLevel)
-
getClass
private java.lang.String getClass(nu.xom.Element element)
-
getType
private java.lang.String getType(nu.xom.Element element)
-
getType
private java.lang.String getType(nu.xom.Element element, java.lang.String defaultType)
-
hasNamespaces
private boolean hasNamespaces(nu.xom.Element element)
-
isArray
private boolean isArray(nu.xom.Element element, boolean isTopLevel)
-
isFunction
private boolean isFunction(nu.xom.Element element)
-
isNullObject
private boolean isNullObject(nu.xom.Element element)
-
isObject
private boolean isObject(nu.xom.Element element, boolean isTopLevel)
-
newElement
private nu.xom.Element newElement(java.lang.String name)
-
processArrayElement
private JSON processArrayElement(nu.xom.Element element, java.lang.String defaultType)
-
processElement
private java.lang.Object processElement(nu.xom.Element element, java.lang.String type)
-
processJSONArray
private nu.xom.Element processJSONArray(JSONArray array, nu.xom.Element root, java.lang.String[] expandableProperties)
-
processJSONObject
private nu.xom.Element processJSONObject(JSONObject jsonObject, nu.xom.Element root, java.lang.String[] expandableProperties, boolean isRoot)
-
canAutoExpand
private boolean canAutoExpand(JSONArray array)
Only perform auto expansion if all children are objects.- Parameters:
array- The array to check- Returns:
- True if all children are objects, false otherwise.
-
processJSONValue
private nu.xom.Element processJSONValue(java.lang.Object value, nu.xom.Element root, nu.xom.Element target, java.lang.String[] expandableProperties)
-
processObjectElement
private JSON processObjectElement(nu.xom.Element element, java.lang.String defaultType)
-
removeNamespacePrefix
private java.lang.String removeNamespacePrefix(java.lang.String name)
-
setOrAccumulate
private void setOrAccumulate(JSONObject jsonObject, java.lang.String key, java.lang.Object value)
-
setValue
private void setValue(JSONArray jsonArray, nu.xom.Element element, java.lang.String defaultType)
-
setValue
private void setValue(JSONObject jsonObject, nu.xom.Element element, java.lang.String defaultType)
-
isCData
private boolean isCData(nu.xom.Element element)
-
simplifyValue
private java.lang.Object simplifyValue(JSONObject parent, java.lang.Object json)
-
trimSpaceFromValue
private java.lang.String trimSpaceFromValue(java.lang.String value)
-
writeDocument
private java.lang.String writeDocument(nu.xom.Document doc, java.lang.String encoding)
-
-