Json输出以双引号生成数字,如String

时间:2017-10-23 13:53:51

标签: java json rest gson

我需要在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 \"");

2 个答案:

答案 0 :(得分:1)

通过Integer.toString(i)或String.valueOf(i)

将它们转换为Strings

编辑:

如果您喜欢,可以将JSONObject子类化并覆盖numberToString()方法以包含引号

OR

对添加引号的结果字符串使用一些正则表达式操作。不幸的是我对正则表达不太好,但也许别人可以帮助你

答案 1 :(得分:0)

使用正则表达式替换字符串替换,因为我无法找到任何其他方法。

jsonString = jsonString.replaceAll(“:\ s([\ d] +)”,“:\”$ 1 \“”);