[Practicalxml-commits] SF.net SVN: practicalxml:[157] branches/dev-1.1/src
Brought to you by:
kdgregory
|
From: Auto-Generated S. C. M. <pra...@li...> - 2009-09-24 16:59:08
|
Revision: 157
http://practicalxml.svn.sourceforge.net/practicalxml/?rev=157&view=rev
Author: kdgregory
Date: 2009-09-24 16:58:59 +0000 (Thu, 24 Sep 2009)
Log Message:
-----------
xml -> json: support quoted fieldnames
Modified Paths:
--------------
branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/json/Json2XmlConverter.java
branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/json/Xml2JsonConverter.java
branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/json/Xml2JsonOptions.java
branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/json/TestJson2XmlConverter.java
branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/json/TestXml2JsonConverter.java
Modified: branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/json/Json2XmlConverter.java
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/json/Json2XmlConverter.java 2009-09-24 01:21:05 UTC (rev 156)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/json/Json2XmlConverter.java 2009-09-24 16:58:59 UTC (rev 157)
@@ -29,6 +29,8 @@
* only once (thus thread-safety is not an issue).
* <p>
* See <a href="http://www.json.org/">json.org</a> for the JSON grammar.
+ * This implementation will also accept strings that do not quote their
+ * field names.
* <p>
* The current implementation creates a child element for each element
* of an array, producing output similar to that from the Bean->XML
@@ -140,6 +142,8 @@
String next = nextToken();
if (atEndOfSequence(next, "}", false))
return;
+ if (next.equals("\""))
+ next = parseString();
while (true)
{
Modified: branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/json/Xml2JsonConverter.java
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/json/Xml2JsonConverter.java 2009-09-24 01:21:05 UTC (rev 156)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/json/Xml2JsonConverter.java 2009-09-24 16:58:59 UTC (rev 157)
@@ -31,12 +31,12 @@
*/
public class Xml2JsonConverter
{
- private EnumSet<Json2XmlOptions> _options = EnumSet.noneOf(Json2XmlOptions.class);
+ private EnumSet<Xml2JsonOptions> _options = EnumSet.noneOf(Xml2JsonOptions.class);
- public Xml2JsonConverter(Json2XmlOptions... options)
+ public Xml2JsonConverter(Xml2JsonOptions... options)
{
- for (Json2XmlOptions option : options)
+ for (Xml2JsonOptions option : options)
_options.add(option);
}
@@ -85,15 +85,6 @@
}
- private StringBuilder appendText(StringBuilder buf, String text)
- {
- buf.append('"')
- .append(JsonUtil.escape(text))
- .append('"');
- return buf;
- }
-
-
private StringBuilder appendObject(StringBuilder buf, List<Element> children)
{
List<String> names = new ArrayList<String>();
@@ -105,7 +96,7 @@
for (Iterator<String> itx = names.iterator() ; itx.hasNext() ; )
{
String name = itx.next();
- buf.append(name).append(": ");
+ appendFieldName(buf, name);
if (arrays.containsKey(name))
appendArray(buf, arrays.get(name));
else
@@ -164,4 +155,27 @@
}
}
}
+
+
+ private StringBuilder appendFieldName(StringBuilder buf, String name)
+ {
+ if (_options.contains(Xml2JsonOptions.QUOTE_FIELD_NAMES))
+ buf.append('"')
+ .append(name)
+ .append('"');
+ else
+ buf.append(name);
+
+ buf.append(": ");
+ return buf;
+ }
+
+
+ private StringBuilder appendText(StringBuilder buf, String text)
+ {
+ buf.append('"')
+ .append(JsonUtil.escape(text))
+ .append('"');
+ return buf;
+ }
}
Modified: branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/json/Xml2JsonOptions.java
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/json/Xml2JsonOptions.java 2009-09-24 01:21:05 UTC (rev 156)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/json/Xml2JsonOptions.java 2009-09-24 16:58:59 UTC (rev 157)
@@ -20,5 +20,11 @@
*/
public enum Xml2JsonOptions
{
- // nothing here right now
+ /**
+ * If enabled, field names will be quoted. This is required by the
+ * <a href="http://www.json.org/">JSON spec</a>, so should be used
+ * if you expect to use the result anywhere but in a browser. It is
+ * not required by <code>eval()</code>, nor for explicit scripting.
+ */
+ QUOTE_FIELD_NAMES
}
Modified: branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/json/TestJson2XmlConverter.java
===================================================================
--- branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/json/TestJson2XmlConverter.java 2009-09-24 01:21:05 UTC (rev 156)
+++ branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/json/TestJson2XmlConverter.java 2009-09-24 16:58:59 UTC (rev 157)
@@ -168,6 +168,21 @@
}
+ public void testConvertSingleElementWithQuotedFieldname() throws Exception
+ {
+ String src = "{\"foo\": 123}";
+
+ Element root = new Json2XmlConverter(src).convert();
+ assertEquals("data", root.getNodeName());
+ assertEquals(1, root.getChildNodes().getLength());
+
+ Element child = (Element)root.getFirstChild();
+ assertEquals("foo", child.getNodeName());
+ assertEquals("123", DomUtil.getText(child));
+ assertEquals(0, DomUtil.getChildren(child).size());
+ }
+
+
public void testFailUnterminatedString() throws Exception
{
String src = "{foo: \"bar}";
Modified: branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/json/TestXml2JsonConverter.java
===================================================================
--- branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/json/TestXml2JsonConverter.java 2009-09-24 01:21:05 UTC (rev 156)
+++ branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/json/TestXml2JsonConverter.java 2009-09-24 16:58:59 UTC (rev 157)
@@ -34,10 +34,12 @@
// Support Code
//----------------------------------------------------------------------------
- public void convertAndAssert(String expected, ElementNode rootNode)
+ public void convertAndAssert(
+ String expected, ElementNode rootNode,
+ Xml2JsonOptions... options)
{
Element root = rootNode.toDOM().getDocumentElement();
- String json = new Xml2JsonConverter().convert(root);
+ String json = new Xml2JsonConverter(options).convert(root);
assertEquals(expected, json);
}
@@ -132,6 +134,16 @@
}
+ public void testQuotedFieldnames() throws Exception
+ {
+ convertAndAssert(
+ "{\"foo\": \"bar\"}",
+ element("data",
+ element("foo", text("bar"))),
+ Xml2JsonOptions.QUOTE_FIELD_NAMES);
+ }
+
+
public void testStringEscaping() throws Exception
{
convertAndAssert(
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|