在C#中处理JSON响应中的转义字符

时间:2015-05-24 12:25:30

标签: c# .net regex json

我有一个相当简单的问题,出于某种原因,我可以找到使用SO和Google的帮助。 我收到的JSON回复如下:

"{
\"data\": [
    {
        \"type\": \"gif\",
        \"id\": \"FiGiRei2ICzzG\",
        \"url\": \"http: //giphy.com/gifs/funny-cat-FiGiRei2ICzzG\",
        \"bitly_gif_url\": \"http: //gph.is/1fIdLOl\",
        \"bitly_url\": \"http: //gph.is/1fIdLOl\",
        \"embed_url\": \"http: //giphy.com/embed/FiGiRei2ICzzG\",
        \"username\": \"\",
        \"source\": \"http: //tumblr.com\", etc........

所以这是一个标准的JSON,但是带有\ escape字符。 现在我试图删除这些转义字符来解析JSON中的数据。 试过字符串的.replace和其他一些解决方案,但由于某种原因我留下了转义字符.. 谢谢!! 这是我用来执行请求的代码

 public static void GetRequest()
    {
        string sFullURL = "http://api.giphy.com/v1/gifs/search?q=";
        string sSearchTerm = "funny+cat";
        string sContent;
        string sAPIKey = "&api_key=dc6zaTOxFJmzC";
        string sLimit = "&limit=1";
        string sFullRequest = "http://api.giphy.com/v1/gifs/search?q=funny+cat&api_key=dc6zaTOxFJmzC";
        HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(string.Format(sFullURL + sSearchTerm + sAPIKey + sLimit));
        WebReq.Method = "GET";
        HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
        System.Diagnostics.Debug.WriteLine(WebResp.StatusCode);
        System.Diagnostics.Debug.WriteLine(WebResp.Server);
        Stream Answer = WebResp.GetResponseStream();
        StreamReader _Answer = new StreamReader(Answer);
        sContent = _Answer.ReadToEnd();
        sContent = Regex.Replace(sContent, @"\\", ""); 
    }

2 个答案:

答案 0 :(得分:4)

看起来你对调试器中的值感到困惑。调试器窗口显示字符串的转义版本。

enter image description here

您可以点击小放大图标在“文本可视化工具”中打开字符串,以查看字符串的实际值。

enter image description here

答案 1 :(得分:-3)

你试图使用常规转义(“\\”)和逐字字符串(@“string”)两次转义\字符。 试试

@Multipart
    @POST("/adduserrequestservice")
    void addUserRequestService(@Part("checksum") TypedString checksum, @Part("userId") TypedString userId,
                               @Part("reqType") TypedString requesttype,@Part("reqFormType") TypedString reqFormtype,
                               @Part("requestFields") List<RequestFields> requestFields,
                               @Part("timestamp") Long timestamp,retrofit.Callback<RetrieveResponse> callback);




    { 
            "checksum"      : "747d23f4333f05c60d57f83ab3648e2e",
            "userId"        : 1,
            "reqType"       : "Medical Devices",
            "reqFormType"   : "General Request",
            "requestFields"  : [
                                    {
                                        "fieldName" : "xxx",
                                        "fieldValue" : "s3343"
                                    }
                                ],
            "timestamp" : 1403477427
    }