我调用一个Web服务来获取JSON字符串响应,它包含的反斜杠不是原始字符串。下面是我请求JSON字符串对象的代码,它是:{“name”:“name”,“id”:1}
protected String doInBackground(String... uri)
{
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response;
String responseString = null;
try {
response = httpclient.execute(new HttpGet(uri[0]));
StatusLine statusLine = response.getStatusLine();
if(statusLine.getStatusCode() == HttpStatus.SC_OK){
ByteArrayOutputStream out = new ByteArrayOutputStream();
response.getEntity().writeTo(out);
out.close();
responseString = out.toString();
} else{
//Closes the connection.
response.getEntity().getContent().close();
throw new IOException(statusLine.getReasonPhrase());
}
} catch (ClientProtocolException e) {
//TODO Handle problems..
} catch (IOException e) {
//TODO Handle problems..
}
return responseString;
}
在后执行中,我只是尝试将这个resush字符串解析为JSONObject。
protected void onPostExecute(String result) {
super.onPostExecute(result);
TextView t1=(TextView)findViewById(R.id.textView1);
TextView t2=(TextView)findViewById(R.id.textView2);
//String s = result.replaceAll("\\", ""); //I have tried to escape backslashes also using this line.
String name="failure";
int id;
try
{
t1.setText(result);
JSONObject reader = new JSONObject(result.toString()); //Exception on this line.
//name = reader.getString("name").toString();
//id = reader.getInt("id");
t2.setText(name);
}
catch (Exception e)
{
t2.setText(e.toString());
}
}
Rsponse字符串是:“{\'name\':\'name\',\'id\':1}”,当我试图将其解析为JSONObject时,它会抛出一个异常:org。json。JSONException值“{”name:“name”,“id”:1}”类型无法转换为json对象。
看看你的信息转换器列表。看起来您的Json转换器(例如MappingJackson2HttpMessageConverter)位于StringMessageConverter之前。json将转义字符“\'before'”添加到它转换的每个字符串中。
在请求中添加这个头解决了我的问题:
"Content-Type" = "application/x-www-form-urlencoded"
我知道这是一个老问题,但是我被同一个问题卡住了,唯一的区别是,我有一个JSONArray而不是JSONObject。但是我在搜索Stackoverflow寻找类似问题后遵循的方法是我下面要陈述的方法,以防有人在我偶然发现你的问题时来寻找答案。
首先,您需要研究您收到的json响应。"{\"name\":\"Name\",\"id\": 1}"是一个字符串。您可以看到"在{之前和之后}。如果这个字符串是您从Web服务收到的原始json,那么您逃过反斜杠并用该字符串构建JSONObject的方法应该是有效的。您可以尝试的一种方法是:
result = result.trim();
result = result.substring(1,result.length() - 1);
result = result.replace("\\","");
然后,
JSONObject reader = new JSONObject(result);
name = reader.getString("name");
id = reader.getInt("id");
这个解决方案的要诀是在json响应之前去掉那些额外的倒逗号,然后用这个字符串创建一个JSONObject。
关于JSONArray的情况,解决方案如下:
json响应:{"错误": false,"myorder细节":{"order_id":"26","orderjson":"[{\"名称\":\"Disprin\",\"Id\": 53,\"Quantity\": 1,\"Price\": 50}]"}}
JSONObject jObj = new JSONObject(response);
boolean error = jObj.getBoolean("error");
if (!error)
{
JSONObject jsonObj= jObj.getJSONObject("myorderdetails");
String s = jsonObj.getString("orderjson");
s = s.replace("\\", "");
JSONArray orderjson = new JSONArray(s);
for(int i=0;i<orderjson.length();i++){
JSONObject jsonObject=orderjson.getJSONObject(i);
String pname = (String)jsonObject.get("Name");
int pquantity = jsonObject.getInt("Quantity");
double pprice = jsonObject.getDouble("Price");
}
问题内容: 我试图使用Gson将Java对象转换为json。但是当我尝试打印出来时,我得到了这个JSON {“ user”:“ {\” email \“:\” abc@gmail.com \“,\” lastName \“:\” Las \“,\” name \“:\” amy \“,\” password \“:\” qwe123 \“,\”电话\“:\” 8901245244 \“}”} 我试
使用Jacksons的ObjectMapper,如果我尝试将已经包含反斜杠的字符串转换为字节数组,然后将该字节数组更改回字符串,则输出包含一个额外的反斜杠。以下代码显示了该问题 有没有办法配置ObjectMapper,使mapper#writeValueAsBytes方法不会将字符串Test\string更改为Test\\string?有没有其他方法可以使用Jackson/ObjectMapper
我正在Jersey上构建REST服务,并使用Jackson从我模型的java类生成JSON。模型具有绝对简单的值,我认为这是最典型的情况。但我得到了奇怪的结果: 我的期待结果: 我的字段源值不包含任何特殊字符。这些是简单的单词。 这是我的Java类。实体: Rest服务等级: 我尝试使用注释JsonRawValue来表示字符串属性: 但在这种情况下,结果是: 我期望: 很明显,Jackson以某种
问题内容: 我正在尝试使用Json.NET将列表序列化为json字符串,但返回字符串中包含反斜杠,这反过来使json解析失败。 上面的代码返回 这将导致所有JSON解析失败。如何删除这些。 问题答案: 不,不是 可能有两个问题: A)您正在查看调试器的结果。为了检查这一点,将其放入一个临时变量中(就像我所做的一样),然后使用调试器进行查看。单击沙漏右箭头,然后选择。 要么 B)调用方法将对象 再次
null Groovy:找不到四位十六进制字符代码
问题内容: 我有一个字符串存储为: 有没有办法我可以转换成? 问题答案: 您可以为此使用: 输出: