【问题标题】:Json Output to produce numbers in double quotes like StringJson 输出以生成双引号中的数字,如字符串
【发布时间】: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 开头 - 您需要 : 而不是 =

标签: java json rest gson


【解决方案1】:

只需通过 Integer.toString(i) 或 String.valueOf(i) 将它们转换为字符串

编辑:

如果您喜欢,您可以只继承 JSONObject 并覆盖 numberToString() 方法以包含引号

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

【讨论】:

  • 数据为 xml 格式,使用 JSONObject 库转换为 json。如果我可以应用上述方法,我没有任何 java 代码。如果我必须这样做,我需要遍历 json 树,找到所有数字并用双引号括起来。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-15
    • 2011-11-19
    • 1970-01-01
    • 2013-08-08
    • 2021-11-16
    • 1970-01-01
    相关资源
    最近更新 更多