【发布时间】:2018-04-04 02:30:48
【问题描述】:
我需要在我的 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 ===================
我根据 cmets 中提供的建议和链接尝试了以下代码,方法是将库更改为使用 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\"");
【问题讨论】:
-
查看this答案。
-
@AbdullahKhan ,在这种情况下,我需要切换到一个新库。 JSONObject 库中是否有一些东西可以让我用双引号设置数字
-
@MonkeyD.Luffy,我觉得我做不到。当我们调用 REST API 调用时,输出在浏览器上。该链接是关于 javascript 客户端的。我正在寻找服务器端解决方案。
-
这不是有效的 JSON 开头 - 您需要
:而不是=。