【问题标题】:How to correctly handle an Unterminated string exception?如何正确处理未终止的字符串异常?
【发布时间】:2015-12-09 15:30:48
【问题描述】:

我正在使用JSON.org java library 进行修改。

由于\n 字符,我目前遇到错误:

try{
            String s = "{\"property:\":\"line1\n,line2\"}";
            JSONObject o = new JSONObject(s);
        }catch(Exception e){
            e.printStackTrace(System.err);
        }

结果:

org.json.JSONException: Unterminated string at 20 [character 0 line 2]
    at org.json.JSONTokener.syntaxError(JSONTokener.java:433)
    at org.json.JSONTokener.nextString(JSONTokener.java:261)
    at org.json.JSONTokener.nextValue(JSONTokener.java:361)
    at org.json.JSONObject.<init>(JSONObject.java:218)
    at org.json.JSONObject.<init>(JSONObject.java:325)

快速搜索后,我找到了this answer 这指向我的字符串必须像这样转义:

String s = "{\"property:\":\"line1\\n,line2\"}";

我将不再看到异常,可以用'\n' 替换"\n" 的字符串,但我只是想知道:

是否推荐在 java 中处理 JSON 字符串中的新行?

【问题讨论】:

  • 这和 JavaScript 有什么关系?
  • 大部分是 JSON 部分。我没有在我的问题中提到我通常会从 Javascript (websocket) 接收这个字符串,我的主要 java 代码将是一个基本的 Websocket 服务器。我不想让事情变得过于复杂,因为这主要围绕 java 中的 JSON 解析展开
  • 请注意,obj.get("property:") 将返回正确解码的String 值,即。 JSON 中的\n 变成换行符。

标签: javascript java json escaping


【解决方案1】:

正如您在the JSON specification 中看到的,JSON 不允许在字符串中使用真正的换行符,因此您始终需要使用\n 转义换行符。这不是一个特殊的 Java 事情。另见this question

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    相关资源
    最近更新 更多