我使用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键值数据中的转义字符斜杠。
答案 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"