Java escape JSON String?

2022-09-01 23:57:46

我有以下JSON字符串,我正在发送到NodeJS服务器:

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);

任何想法,我怎么能设法发送所有字符没有问题?


答案 1

我会使用一个库来为你创建你的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

答案 2

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;
}