Java escape JSON String?

匿名 (未验证) 提交于 2019-12-03 01:47:02

问题:

I have the following JSON string that i am sending to a NodeJS server:

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

The problem becomes when the string msget contains the character " and '

On the NodeJS server i am parsing the JSON like this:

var obj = JSON.parse(message); 

Any ideas how i can manage to send all characters without problems?

回答1:

I would use a library to create your JSON String for you. Some options are:

This will make dealing with escaping much easier. An example (using org.json) would be:

JSONObject obj = new JSONObject();  obj.put("id", userID); obj.put("type", methoden); obj.put("msg", msget);  // etc.  final String json = obj.toString(); // 


回答2:

org.json.simple.JSONObject.escape() escapes quotes,, /, \r, \n, \b, \f, \t and other control characters.

import org.json.simple.JSONValue; JSONValue.escape("test string"); 

Add pom.xml when using maven

com.googlecode.json-simplejson-simpletest


回答3:

The best method would be using some JSON library, e.g. Jackson ( http://jackson.codehaus.org ).

But if this is not an option simply escape msget before adding it to your string:

The wrong way to do this is

String msgetEscaped = msget.replaceAll("\"", "\\\""); 

Either use (as recommended in the comments)

String msgetEscaped = msget.replace("\"", "\\\""); 

or

String msgetEscaped = msget.replaceAll("\"", "\\\\\""); 

A sample with all three variants can be found here: http://ideone.com/Nt1XzO



回答4:

If you want to simply escape a string, not an object or array, use this:

String escaped = JSONObject.valueToString(" Quotes \" ' ' \" "); 

http://www.json.org/javadoc/org/json/JSONObject.html#valueToString(java.lang.Object)



回答5:

According to the answer here, quotes in values need to be escaped. You can do that with \"

So just repalce the quote in your values

msget = msget.replace("\"", "\\\""); 


回答6:

Try to replace all the " and ' with a \ before them. Do this just for the msget object(String, I guess). Don't forget that \ must be escaped too.



回答7:

Consider Moshi's JsonWriter class. It has a wonderful API and it reduces copying to a minimum, everything is nicely streamed to the OutputStream.

OutputStream os = ...; JsonWriter json = new JsonWriter(Okio.sink(os)); json   .beginObject()   .name("id").value(userID)   .name("type").value(methodn)   ...   .endObject(); 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!