【问题标题】:How to escape or remove "\" from the gson generated string?如何从 gson 生成的字符串中转义或删除“\”?
【发布时间】:2016-10-23 14:27:22
【问题描述】:

我正在从属性文件中加载一个值,然后将其传递给 gson 方法以将其转换为最终的 json 对象。但是,来自属性文件的值具有双引号,gson 正在将“\”添加到输出中。我已经扫描了整个网络,但找不到解决方案

属性文件包含

0110= This is a test for the renewal and the "Renewal no:" 

这是我的代码

public String toJSONString(Object object) {
    GsonBuilder gsonBuilder = new GsonBuilder();
    Gson gson = gsonBuilder.create();
    //Note object here is the value from the property file
    return gson.toJson(object);
}

这会产生

"{ResponseCode:0110,ResponseText:This is a test for the renewal and the \"Renewal no:\"}"

我不确定在输出中,为什么它在文字周围添加或包装 \ 或者我们在属性文件值中的哪里有双引号?

【问题讨论】:

  • 你的输出实际上不是 JSON,只是一个字符串。
  • @cricket_007 这是一个 JSON 字符串。
  • @SotiriosDelimanolis 我的意思是,例如,ResponseCode 是一个键,不是吗?所以,它应该被引用。
  • 请说明您是如何打电话给toJSONString的。
  • @cricket_007 在他们澄清之前,我已经删除了我的答案,但生成的 JSON 是有效的 JSON 字符串。我不想猜测他们传递给toJSONString 的内容。

标签: java json string gson


【解决方案1】:

根据您的问题中的 cmets,object 参数实际上是在引用具有值的 Java String

{ResponseCode:0110,ResponseText:This is a test for the renewal and the "Renewal no:"}

我不能说为什么,但这就是你的String 包含的内容。

String 是一种特殊类型,Gson 将其解释为 JSON 字符串。由于" 是必须在 JSON 字符串中转义的特殊字符,这就是 Gson 的作用并生成 JSON 字符串。

"{ResponseCode:0110,ResponseText:This is a test for the renewal and the \"Renewal no:\"}"

【讨论】:

  • 我尝试使用字符串替换进行转义,但没有成功。我拥有的最好的唯一关闭解决方案是删除双引号本身,但我想这将是我的最后一个解决方案。我正在寻找一种方法,而不是将'\'作为双引号添加到输出中,它应该打印为带引号的值而不是\(斜杠)
  • @MustafaFarooqui 你为什么担心\?这是有效的 JSON。
  • 根据要求,输出应该是“续订号:”而不是这个\“续订号:\,它有\而不是引号
  • @MustafaFarooqui 那将是无效的 JSON。如果您不尝试编写 JSON,请不要使用 JSON 库。而是自己处理字符串。
【解决方案2】:

\ 字符正在转义字符串中的特殊字符,如 "。你不能在没有前导的字符串中存储 "。它必须是\"。

在显示任何输出字符串时删除斜线。

Apache Commons 有一个用于处理转义和非转义字符串的库:https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringEscapeUtils.html

【讨论】:

  • 我在将它传递给输出显示之前尝试这样做 response= oldResponse.replace("\\\"","\"") 但没有运气:(
  • 最好使用像 Apache Commons String Escape utils 这样的库,因为它能够处理正则表达式无法处理的情况。例如,这些可能是其他转义字符或 unicode。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-24
  • 1970-01-01
相关资源
最近更新 更多