Alo*_*ius 10 java json node.js
我有以下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);
Run Code Online (Sandbox Code Playgroud)
当字符串msget包含字符"和时,问题就变成了'
在NodeJS服务器上,我正在解析JSON,如下所示:
var obj = JSON.parse(message);
Run Code Online (Sandbox Code Playgroud)
任何想法我怎么能设法发送所有字符没有问题?
jab*_*lab 21
我会用一个库String为你创建你的JSON .一些选项是:
这将使处理逃逸变得更加容易.一个例子(使用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
Run Code Online (Sandbox Code Playgroud)
Yeo*_*Kim 13
org.json.simple.JSONObject.escape() 转义引号,, /,\ r,\n,\ b,\ f,\ t和其他控制字符.
import org.json.simple.JSONValue;
JSONValue.escape("test string");
Run Code Online (Sandbox Code Playgroud)
使用maven时添加pom.xml
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
最好的方法是使用一些JSON库,例如Jackson(http://jackson.codehaus.org).
但是如果这不是一个选项,只需在将mst添加到字符串之前转义msget:
这样做的错误方法是
String msgetEscaped = msget.replaceAll("\"", "\\\"");
Run Code Online (Sandbox Code Playgroud)
使用(根据评论中的建议)
String msgetEscaped = msget.replace("\"", "\\\"");
Run Code Online (Sandbox Code Playgroud)
要么
String msgetEscaped = msget.replaceAll("\"", "\\\\\"");
Run Code Online (Sandbox Code Playgroud)
可以在此处找到包含所有三种变体的示例:http://ideone.com/Nt1XzO
小智 8
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;
}
Run Code Online (Sandbox Code Playgroud)
如果您已经在使用 Apache commons,它会为此提供一个静态方法:
StringEscapeUtils.escapeJson("some string")
Run Code Online (Sandbox Code Playgroud)
它将任何字符串转换为正确转义以包含在 JSON 中的字符串
| 归档时间: |
|
| 查看次数: |
94444 次 |
| 最近记录: |