我需要在REST API调用中用双引号生成带有数字和字符串的json输出。
示例:
[
{
"LastName":"abc",
"FirstName":"xyz",
"Id":"123",
},
{
"LastName":"mno",
"FirstName":"pqr",
"Id":"456",
}
]
正如您所看到的,上面的输出是我需要的。
然而,数字123和456没有双引号,因为它们是数字。有没有人知道解决方法?
我正在使用org.json.JSONObject。我的应用程序首先生成一个XML,然后使用以下代码行转换为JSON:
JSONObject json = XML.toJSONObject(xml);
String jsonString = json.toString(PRINT_INDENT_FACTOR);
上面的jsonString在REST API调用中直接在浏览器上呈现。数字显示没有双引号。 JSONObject库下是否有可以解决此问题的属性?
提前致谢!
======================编辑1 ===================
我根据建议和注释中提供的链接尝试了以下代码,方法是将库更改为使用GSon 2.2.2 jar而不是JSONObject
GsonBuilder gb = new GsonBuilder();
gb.setPrettyPrinting();
gb.disableHtmlEscaping();
gb.setLongSerializationPolicy( LongSerializationPolicy.STRING );
Gson gson = gb.create();
File fXmlFile = new File("\\path\\test.xml");
String str = FileUtils.readFileToString(fXmlFile);
System.out.println(gson.toJson(str));
然而输出仍然是没有双引号的数字!!!! :(
我做错了什么?
======================编辑2 ===================
好的,LongSerializationPolicy.STRING仅适用于long类型而不适用于decimal \ float。因此,长值显示在双引号中。然后是int,float和小数。这些也是数值。如何用双引号显示它们?
======================编辑3 ===================
将我的库更改为jackson one并使用jackson-dataformat-xml-2.9.2.jar获取JSON。 所以这些数字现在出现在双引号中。小数,浮点数,整数等。但是不解析整个XML。只解析标签的一部分。它缺少许多其他标签。我在这里读到另一个 post ,知道它有局限性。
======================编辑4 ===================
我刚刚使用正则表达式完成了一个字符串替换。 有效。
jsonString = jsonString.replaceAll(":\ s([\ d] +)",":\" $ 1 \"");
答案 0 :(得分:1)
通过Integer.toString(i)或String.valueOf(i)
将它们转换为Strings编辑:
如果您喜欢,可以将JSONObject子类化并覆盖numberToString()方法以包含引号
OR
对添加引号的结果字符串使用一些正则表达式操作。不幸的是我对正则表达不太好,但也许别人可以帮助你
答案 1 :(得分:0)
使用正则表达式替换字符串替换,因为我无法找到任何其他方法。
jsonString = jsonString.replaceAll(“:\ s([\ d] +)”,“:\”$ 1 \“”);