当前位置: 首页 > 知识库问答 >
问题:

在JSON响应中,字符串包含自动添加的反斜杠

薛坚
2023-03-14

我调用一个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对象。

共有3个答案

怀飞掣
2023-03-14

看看你的信息转换器列表。看起来您的Json转换器(例如MappingJackson2HttpMessageConverter)位于StringMessageConverter之前。json将转义字符“\'before'”添加到它转换的每个字符串中。

晏昀
2023-03-14

在请求中添加这个头解决了我的问题:

"Content-Type" = "application/x-www-form-urlencoded"
宇文飞翮
2023-03-14

我知道这是一个老问题,但是我被同一个问题卡住了,唯一的区别是,我有一个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:找不到四位十六进制字符代码

  • 问题内容: 我有一个字符串存储为: 有没有办法我可以转换成? 问题答案: 您可以为此使用: 输出: