JSON字符串及如何处理转义字符。

5

我正在使用官方的JSON库来开发我的Java项目,但是我注意到了一些奇怪的问题。

如果我有一个像这样的JSON:

{
  "text": "This is a multiline\n text"
}

我尝试获取类似于以下字符串:

System.out.println(jsonObject.getString("text"));

我得到的输出是:
This is a multiline\n text

替代方案:

This is a multiline
text

有人知道如何正确处理特殊字符,例如 \n 和 \t 吗?我可以逐个替换每个字符,但这样会很麻烦。

2个回答

4

您没有正确转义换行符,应该是:

{
  "text": "This is a multiline\\n text"
}

我明白了...问题在于我从网络服务获取我的JSON字符串,而这就是他们提供的方式。你知道有没有一种通用的方法可以将我指定的字符串转换为正确的格式? - Savvas Dalkitsis
你代码中的转义换行符是一个字面上的反斜杠,后面跟着字符n,根本不是转义序列。 - Rudu
我明白这个“问题”是什么。我只是想知道是否有自动处理字符串的方法,就像在Java文件中直接输入它一样... - Savvas Dalkitsis

1

您上面的示例是正确的并且显示正确,但是有"可读性强的" \n(在字符串中为 \n)和转义字符 \n(在字符串中为原始的 \n)。我猜测您使用的库正在生成可读性强的代码而不是正确的转义代码。

尝试: json_obj.text.replace(/\\n/g,"\n"); 将字符串转换回来。


正如我在问题中所说的那样,我可以替换所有这些情况,但是我将不得不自己处理所有特殊字符,例如 \t。我想知道是否有一种“正确”的处理此情况的方法。 - Savvas Dalkitsis
我在 http://www.json.org/ 上看到了大量支持的库,你使用的是哪一个? - Rudu
输入字符串已经嵌入了适当的转义码吗?org.json支持正确的转义输出,这里肯定有错误。 - Rudu
其实你是对的。问题可能出在 Web 服务上... 我尝试从文本文件中加载 JSON,它可以工作。谢谢... - Savvas Dalkitsis
明白了。该服务将提供\n而不是\n。我只看到了输出,所以我才会有那样的想法 :) - Savvas Dalkitsis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接