Java转义JSONstring?
我有我发送到NodeJS服务器的以下JSONstring:
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);
问题变成当stringmsget
包含字符"
和'
在NodeJS服务器上,我parsingJSON是这样的:
var obj = JSON.parse(message);
任何想法如何我可以设法发送所有字符没有问题?
我会用库来为你创build你的JSON String
。 一些选项是:
- GSON
- 克罗克福德的自由
这将使处理逃逸变得更容易。 一个例子(使用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
org.json.simple.JSONObject.escape()转义引号,, /,\ r,\ n,\ b,\ f,\ t和其他控制字符。
import org.json.simple.JSONValue; JSONValue.escape("test string");
-
json-simple
家 - 文件
使用maven时添加pom.xml
<dependency> <groupId>com.googlecode.json-simple</groupId> <artifactId>json-simple</artifactId> <scope>test</scope> </dependency>
最好的方法是使用一些JSON库,例如Jackson( http://jackson.codehaus.org )。
但是,如果这不是一个选项,只需将它添加到您的string之前转义msget:
做到这一点的错误方法是
String msgetEscaped = msget.replaceAll("\"", "\\\"");
无论是使用(如评论中的build议)
String msgetEscaped = msget.replace("\"", "\\\"");
要么
String msgetEscaped = msget.replaceAll("\"", "\\\\\"");
所有三种变体的样本可以在这里find: http : //ideone.com/Nt1XzO
根据这里的答案,值中的引号需要逃脱。 你可以用\"
所以只要在您的价值报价
msget = msget.replace("\"", "\\\"");
如果你想简单地转义一个string,而不是一个对象或数组,使用这个:
String escaped = JSONObject.valueToString(" Quotes \" ' ' \" ");
http://www.json.org/javadoc/org/json/JSONObject.html#valueToString(java.lang.Object)
尝试用\来replace所有的“和”,这只是为了msget对象(string,我猜),不要忘了\也必须被转义。
考虑Moshi的JsonWriter类。 它有一个非常棒的API,它将复制减less到最小程度,一切都很好地传输到OutputStream。
OutputStream os = ...; JsonWriter json = new JsonWriter(Okio.sink(os)); json .beginObject() .name("id").value(userID) .name("type").value(methodn) ... .endObject();