Java转义JSON字符串?

新手上路,请多包涵

我有以下要发送到 NodeJS 服务器的 JSON 字符串:

 String string = "{\"id\":\"" + userID + "\",\"type\":\"" + methoden + "\",\"msg\":\"" + msget + "\", \"name\":\"" + namnet + "\", \"channel\":\"" + activeChatChannel + "\", \"visitorNick\":\"\", \"agentID\":\" " + agentID + "\"}";

PrintWriter pw = new PrintWriter(new OutputStreamWriter(os, "utf-8"));
pw.println(string);

当字符串 msget 包含字符 "'

在 NodeJS 服务器上,我像这样解析 JSON:

 var obj = JSON.parse(message);

我有什么想法可以毫无问题地发送所有字符吗?

原文由 Alosyius 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 900
2 个回答

我会使用库为您创建 JSON String 。一些选项是:

这将使处理转义变得容易得多。一个例子(使用 org.json )是:

 JSONObject obj = new JSONObject();

obj.put("id", userID);
obj.put("type", methoden);
obj.put("msg", msget);

// etc.

final String json = obj.toString(); // <-- JSON string

原文由 jabclab 发布,翻译遵循 CC BY-SA 3.0 许可协议

https://www.json.org/ 上的 JSON 规范在设计上非常简单。转义 JSON 字符串中的字符并不难。此代码对我有用:

 private String escape(String raw) {
    String escaped = raw;
    escaped = escaped.replace("\\", "\\\\");
    escaped = escaped.replace("\"", "\\\"");
    escaped = escaped.replace("\b", "\\b");
    escaped = escaped.replace("\f", "\\f");
    escaped = escaped.replace("\n", "\\n");
    escaped = escaped.replace("\r", "\\r");
    escaped = escaped.replace("\t", "\\t");
    // TODO: escape other non-printing characters using uXXXX notation
    return escaped;
}

原文由 Ron DeSantis 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题