我有以下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);
任何想法如何设法发送所有字符没有问题?
答案 0 :(得分:17)
我会使用库为您创建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
答案 1 :(得分:13)
org.json.simple.JSONObject.escape()
转义引号,, /,\ r,\ n,\ b,\ f,\ t和其他控制字符。
import org.json.simple.JSONValue;
JSONValue.escape("test string");
使用maven时添加pom.xml
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<scope>test</scope>
</dependency>
答案 2 :(得分:9)
最好的方法是使用一些JSON库,例如:杰克逊(http://jackson.codehaus.org)。
但如果这不是一个选项,只需在将msget添加到字符串之前转义msget:
执行此操作的错误方法是
String msgetEscaped = msget.replaceAll("\"", "\\\"");
使用(根据评论中的建议)
String msgetEscaped = msget.replace("\"", "\\\"");
或
String msgetEscaped = msget.replaceAll("\"", "\\\\\"");
可在此处找到包含所有三种变体的示例:http://ideone.com/Nt1XzO
答案 3 :(得分:5)
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;
}
答案 4 :(得分:3)
如果您想简单地转义字符串,而不是对象或数组,请使用:
String escaped = JSONObject.valueToString(" Quotes \" ' ' \" ");
http://www.json.org/javadoc/org/json/JSONObject.html#valueToString(java.lang.Object)
答案 5 :(得分:3)
如果您已经在使用Apache Commons,它将为此提供一个静态方法:
StringEscapeUtils.escapeJson("some string")
它将任何字符串转换为可以正确转义以包含在JSON中的字符串
答案 6 :(得分:2)
答案 7 :(得分:2)
\x0
答案 8 :(得分:0)
尝试在它们之前替换所有的“和”。只为msget对象(String,我猜)。不要忘记\必须转义\。
答案 9 :(得分:0)
考虑Moshi&#39; JsonWriter课程。它有一个很棒的API,它可以将复制减少到最少,所有内容都很好地流式传输到OutputStream。
self.title = "A Title"
答案 10 :(得分:0)
在 build.gradle
中(如果使用 maven,进行类似的更改)包含此依赖项:
implementation group: 'org.apache.avro', name: 'avro-tools', version: '1.10.2'
那么:
import net.minidev.json.JSONValue;
String escapedString = JSONValue.escape(yourString);