Android - 将json字符串转换为JSONObject而不删除转义字符

时间:2018-02-07 06:42:30

标签: android json

我使用JSONObject jsonObject = new JSONObject(jsonString);将json字符串转换为JSONObject并使用gson将json转换为Java对象

但是当json属性值包含引号时,它会给出错误, 比如,{ "length" : "10"" } (its, 10 inches)


编辑: 我以下列方式从服务器api获取数据:
"{\"data\":\"10\"\"}"
我将\"替换为",并转换为{ "data" : "10"" } 这给了异常,因为它无法将jsonobject转换为java对象
org.json.JSONException: Unterminated object at character 13 of {"data":"10""}
如何将"{\"data\":\"10\"\"}"转换为{ "data" : "10\"" }


修改2 : 我正在以错误的方式将字符串转换为JSONObject 通过删除斜杠,我也删除了转义字符的斜杠。

解决方案:相反,我使用了 StringEscapeUtils.unescapeJson(jsonString),它没有删除json键值数据中的转义字符斜杠。

3 个答案:

答案 0 :(得分:2)

请分享您的错误。 至于您的问题,我可以看到10附近有2个引号。

{ "length" : "10"`"` }                    

如果您想插入“for inches”,请提供\"

答案 1 :(得分:2)

您必须在\之前使用"转义字符。这是你应该做的:

{ "length" : "10\"" }

如果必须在JSON字符串中使用特殊字符,则可以使用\ character。

对其进行转义

请参阅JSON中使用的特殊字符列表:

\b  Backspace (ascii code 08)
\f  Form feed (ascii code 0C)
\n  New line
\r  Carriage return
\t  Tab
\"  Double quote
\\  Backslash character

答案 2 :(得分:0)

试试这个

jsonString = "{\"data\":\"10\"\"}";

String jsonFormattedString = jsonString.replaceAll("\\\\", "");

Log.i("Response",":"+jsonFormattedString);

<强>输出

I/Response: :{"data":"10""}

修改

jsonString = "{\"data\":\"10\"\"}";

String jsonFormattedString = downloadDetails.replaceAll("\"", "");

Log.i("Response",":"+jsonFormattedString);

JSONObject jsonObject = new JSONObject(jsonFormattedString);
String data = jsonObject.getString("data");
Log.i("Response data",":"+data);

<强>输出

I/Response: :{data:10}
I/Response data: :10

最后编辑

jsonString = "{\"data\":\"10\"\"}";

String jsonFormattedString = downloadDetails.replaceAll("\"", "");

Log.i("Response",":"+jsonFormattedString);


final String regex = "([a-zA-Z0-9-]+):([a-zA-Z0-9-]+)";
final String subst = "\"$1\":\"$2\"";

final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(jsonFormattedString);

jsonFormattedString = matcher.replaceAll(subst);

Log.i("Final Response",":"+jsonFormattedString);

JSONObject jsonObject = new JSONObject(jsonFormattedString);
String data = jsonObject.getString("data");
Log.i("Response data",":"+data);

data = data+"\"";

Log.i("FINAL VALUE",":"+data);

最后输出

I/Response: :{data:10}
I/Final Response: :{"data":"10"}
I/Response data: :10
I/FINAL VALUE: :10"