Java转义JSON字符串?

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)

  • 没有这种方法`逃避'. (6认同)
  • [DOC](http://alex-public-doc.s3.amazonaws.com/json_simple-1.1/org/json/simple/JSONObject.html#escape(java.lang.String中)) (2认同)
  • JSONObject.quote(String)完成这项工作. (2认同)

Dir*_*ski 9

最好的方法是使用一些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)


dav*_*wil 7

阿帕奇公地

如果您已经在使用 Apache commons,它会为此提供一个静态方法:

StringEscapeUtils.escapeJson("some string")
Run Code Online (Sandbox Code Playgroud)

它将任何字符串转换为正确转义以包含在 JSON 中的字符串

请参阅此处的文档