删除JSON中的反斜杠[重复]

kokeuurv  于 4个月前  发布在  其他
关注(0)|答案(1)|浏览(64)

此问题在此处已有答案

Replace "\" with "" in a string in C#(9个答案)
23天前关闭。
此帖子已于23天前编辑并提交以供审阅,无法重新打开:

需要详细信息或澄清通过editing this post添加详细信息并澄清问题。

我有一个包含反斜杠字符的JSON。

"{\"multicast_id\":972977234134833616,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1702805668638456%867f64cc867f64cc\"}]}"

字符串
我要移除反斜扛。我尝试了所有可能的方法来移除反斜扛。但似乎都不起作用。我尝试的方法有:

  1. JToken.解析(响应).ToString()
    1.正则表达式反转义(响应)
    1.自定义方法。
private string RemoveBackslash(string str)
        {
            StringBuilder sb = new StringBuilder();

            foreach (char c in str) 
            {
                if (c == '\\')
                {
                    char ch = c;
                }
                else
                {
                    sb.Append(c);
                }
            }
            return sb.ToString();
        }


1.响应=响应.替换(“",“”);
请帮我删除JSON字符串中的反斜杠。
我尝试了所有可能的方法来消除反斜杠字符。我没有成功。我尝试了类似的堆栈溢出问题,并尝试了所有可能的答案。他们似乎没有一个工作。
This is the screenshot of debugger when I tried response.Replace("", "")
我被要求查看其他一些答案。根据查看结果,现在可以理解反斜杠实际上不是由. NET添加的。是Visual Studio添加了反斜杠。当我在调试器中的Text Visualizer中尝试时,那些反斜杠消失了。所以这是Visual Studio的事情。实际的字符串没有反斜杠。太棒了。但问题是,当我真正发送响应时并在postman中查看它,反斜杠会出现。如果原始字符串不包含任何反斜杠,为什么它会出现在postman中。我想删除postman中出现的反斜杠。我需要一个解决方案来删除这些反斜杠。The postman image containing the backslashes
我被要求提供一个最小的可重复的例子,我试着运行这里给出的同样的例子作为答案。

static void Main(string[] args)
    {
        string jsonString = "{\"multicast_id\":972977234134833616,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1702805668638456%867f64cc867f64cc\"}]}";

        // Method 1: Using JToken.Parse
        string cleanedJson1 = JToken.Parse(jsonString).ToString();

        // Method 2: Using Replace
        string cleanedJson2 = jsonString.Replace("\\", "");

        Console.WriteLine(cleanedJson1);
        Console.WriteLine(cleanedJson2);
    }


因为反斜杠是由visual studio添加的,所以创建一个最小可重复性的示例真的很难。上面的示例在我的计算机上工作。这意味着返回的json不包含任何反斜杠。上面的示例使用了JToken.Parse和string.Replace方法。当我在控制台示例中运行它时,它工作正常,但在我的项目中不工作。为什么?原因是谁创建了反斜杠。在上面的例子中,反斜杠是.NET代码的一部分。我已经给出了一个包含反斜杠的JSON字符串作为输入。但是在我的项目中,那些反斜杠是由visual studio添加的。这两个方法,当反斜杠是由visual studio创建时,JToken.Parse和string.Replace不起作用。根据发送给我以供审阅的链接,这些反斜杠是由visual studio添加的,但原始字符串中没有它。当我通过postman发送和接收字符串时,反斜杠确实出现了。以下是我通过postman接收到的内容。

{
"result": "{\"multicast_id\":1184953349068678451,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1702812609911950%867f64cc867f64cc\"}]}",
"error": ""
}


如果只是visual studio添加了反斜杠,而原始字符串没有它,为什么postman会显示这些反斜杠。
为了重新创建这个示例,我想让visual studio添加这些反斜杠。如果有人指导我如何做,那将是很好的。
有人问我一个问题,我最初是怎么得到这个json的,下面是生成这个json的代码。

public FCMPushNotification SendNotification(string _title, string _message, string priority, string _to)
        {
            FCMPushNotification result = new FCMPushNotification();
            try
            {
                result.Successful = true;
                result.Error = null;
                // var value = message;
                var requestUri = "https://fcm.googleapis.com/fcm/send";

                WebRequest webRequest = WebRequest.Create(requestUri);
                webRequest.Method = "POST";
                webRequest.Headers.Add(string.Format("Authorization: key={0}", "AAAA10wXm0Yxxxxxxxxxx"));
             //   webRequest.Headers.Add(string.Format("Sender: id={0}", "YOUR_FCM_SENDER_ID"));
                webRequest.ContentType = "application/json";

                var data = new
                {
                    to =  _to, // this is for topic 
                    priority = priority,
                    notification = new
                    {
                        title = _title,
                        body = _message,
                        //icon="myicon"
                    }
                };
                //var serializer = new JavaScriptSerializer();
                //var json = serializer.Serialize(data);
                string postbody = JsonConvert.SerializeObject(data).ToString();
                Byte[] byteArray = Encoding.UTF8.GetBytes(postbody);

                webRequest.ContentLength = byteArray.Length;
                using (Stream dataStream = webRequest.GetRequestStream())
                {
                    dataStream.Write(byteArray, 0, byteArray.Length);

                    using (WebResponse webResponse = webRequest.GetResponse())
                    {
                        using (Stream dataStreamResponse = webResponse.GetResponseStream())
                        {
                            using (StreamReader tReader = new StreamReader(dataStreamResponse))
                            {
                                string sResponseFromServer = tReader.ReadToEnd();
                                result.Response = sResponseFromServer;
                            }
                        }
                    }
                }

            }
            catch (Exception ex)
            {
                result.Successful = false;
                result.Response = null;
                result.Error = ex;
            }
            return result;
        }
[HttpPost]
    [Route("[action]")]
    public result SendNotification([FromBody] Notification value)
    {
        result rr = new result();
        rr.Result = "Error";
        rr.Error = "";
        SqlConnection con = new SqlConnection(connString);
        string query = "SELECT UserToken FROM AndroidTokens WHERE UserId='" + value.UserId + "'";
        
        con.Open();
        DataTable dt = new DataTable();
        SqlDataAdapter adp = new SqlDataAdapter(query, con);
        adp.Fill(dt);
        string userToken = string.Empty;

        if (dt.Rows.Count > 0)
        {
            DataRow dr = dt.Rows[0];
            userToken = dr["UserToken"].ToString();
        }
        FCMPushNotification fcmPush = new FCMPushNotification();
        fcmPush = fcmPush.SendNotification(value.Title, value.Message, value.Priority, userToken);
        if (fcmPush.Successful)
        {
            string response = fcmPush.Response; // THIS LINE IS CREATING THE PROBLEM
            string token = response.Replace("\\", "");
            rr.Result = token;
        }
        else
        {
            rr.Error = fcmPush.Error.Message;
        }
        return rr;
    }

8fsztsew

8fsztsew1#

如果你有一个包含转义反斜杠的JSON字符串,并且你想删除这些反斜杠以获得一个干净的JSON字符串,你可以在C#中按照以下步骤操作:

using System;
using Newtonsoft.Json.Linq;

class Program
{
    static void Main()
    {
        string jsonString = "{\"multicast_id\":972977234134833616,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1702805668638456%867f64cc867f64cc\"}]}";

        // Method 1: Using JToken.Parse
        string cleanedJson1 = JToken.Parse(jsonString).ToString();

        // Method 2: Using Replace
        string cleanedJson2 = jsonString.Replace("\\", "");

        Console.WriteLine(cleanedJson1);
        Console.WriteLine(cleanedJson2);
    }
}

字符串

相关问题