【问题标题】:Java parse "\n" as not line breakJava 将“\n”解析为非换行符
【发布时间】:2015-03-15 06:00:25
【问题描述】:

我正在使用 gson 解析一个 json 文件。 json 文件中的每一行都是一个 JSON 对象。其中一个字段,有一堆unicode,加上\n

{"id":"12345", "text":"RT @abo_khalid_03: \u0644\u0623\u0646 \u0623\u0645\u0631\u0643\u0650 \u064a\u0647\u0645\u0646\u064a\ud83c\udf39\n\n\u0635\u0648\u0631 \u0627\u0644\u0646\u0633\u064e\u0627\u0621 \u0641\u064a \u0627\u0644\u0639\u0631\u0636 \u0627\u0645\u0627\u0645 \u0627\u0644\u062c\u0645\u064a\u0639 \u0625\u062d\u062f\u064e\u0649 \u0627\u0644\u0630\u0646\u0648\u0628 \u0627\u0644\u062c\u064e\u0627\u0631\u0651\u064a\u0647\u2757\ufe0f\n\n\u0641\u064e\u0625\u0646 \u0644\u0645 \u062a\u062c\u0639\u0644\u0651\u064a \u0644\u0643\u0650 \u062e\u064a\u0631\u064b\u0627 \u062c\u0627\u0631\u064a \u060c\n\n\u0644\u0627 \u062a\u062c\u0639\u0651\u0644\u064a \u2026"}

整个事情就是一行,JSON对象的末尾只有一个换行符。字段中的“\n”字符被视为字面上的“\n”。 当我使用 gson 取出这个字段并将其转换为字符串时,gson 会将“\n”字符转换为换行符并弄乱整个结构。

编辑: 看来我的 JSON 解码器(我正在使用 gson)正在将“\n”解释为换行符(我想应该如此)。那么我的问题是,如何在不将 \n 转换为换行符的情况下将 JSON 字段解析为字符串?

【问题讨论】:

  • \n 换行符。 Java 不会导致这种情况。
  • 在我看来不太像 JSON。
  • 抱歉,请允许我编辑文本。我只粘贴了 JSON 的一部分。这应该使它更像 JSON
  • Java 中将两个字符 \ 和 n 转换为行终止符的唯一组件是编译器和正则表达式编译器。您的问题出在其他地方,很可能与您使用的 JSON 解码器有关,否则数据一开始就没有正确格式化。

标签: java json gson


【解决方案1】:

如果 \n 应该是两个字符,一个 \ 和一个 n,那么它不是正确编码的 JSON。 JSON 字符串会将其编码为

\\n 

【讨论】:

  • 问题是当我在任何文本编辑器中打开粘贴的文本时,它只是 \n,而不是新行。如果您转到:jsonlint.com 并粘贴我发布的 JSON,您可以看到它是有效的 JSON,并且 \n 被视为 \\n
  • 不,它仍然是一个\n。这就是用 JSON 编写新行的方式。 jsonlint.com 显示字符串的 JSON,并且字符串包含换行符。如果字符串应该有一个 SLASH 和一个 n,那么它将有 2 个斜线。
  • 你可以看到 javascript 将其解释为换行符,它应该:jsfiddle.net/4dugb1kb
  • 有趣,有没有一种方法可以在不将 \n 解析为换行符的情况下解析字符串?
  • 我不知道你为什么要把 \n 做成一个特例而不是 \u。但是,您可以在事后进行字符串替换,并将 \n 替换为 \\n。或者对您的数据文件进行搜索/替换并将所有 \n 替换为 \\n
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多