c# - 用空字符串替换json字符串中的双引号

标签 c# regex string json replace

我在反序列化 json 字符串时遇到问题,因为字符串格式错误。

例如 json 对象包含字符串属性 statusMessage,值为“Hello “dog””。

正确的格式应该是"Hello \"dog\" "。

我想从此属性中删除双引号。

类似这样的东西。 “你好“狗””。 -> “你好狗”。

这是我工作的原始 json 字符串。

"{\"jancl\":{\"idUser\":18438201,\"nick\":\"JANCl\",\"photo\":\"1\",\"sex\":1,\"photoAlbums\":1,\"videoAlbums\":0,\"sefNick\":\"jancl\",\"profilPercent\":75,\"emphasis\":false,\"age\":\"-\",\"isBlocked\":false,\"PHOTO\":{\"normal\":\"http://u.aimg.sk/fotky/1843/82/n_18438201.jpg?v=1\",\"medium\":\"http://u.aimg.sk/fotky/1843/82/m_18438201.jpg?v=1\",\"24x24\":\"http://u.aimg.sk/fotky/1843/82/s_18438201.jpg?v=1\"},\"PLUS\":{\"active\":false,\"activeTo\":\"0000-00-00\"},\"LOCATION\":{\"idRegion\":\"6\",\"regionName\":\"Trenčiansky kraj\",\"idCity\":\"138\",\"cityName\":\"Trenčianske Teplice\"},\"STATUS\":{\"isLoged\":true,\"isChating\":false,\"idChat\":0,\"roomName\":\"\",\"lastLogin\":1294925369},\"PROJECT_STATUS\":{\"photoAlbums\":1,\"photoAlbumsFavs\":0,\"videoAlbums\":0,\"videoAlbumsFavs\":0,\"videoAlbumsExts\":0,\"blogPosts\":0,\"emailNew\":0,\"postaNew\":0,\"clubInvitations\":0,\"dashboardItems\":1},\"STATUS_MESSAGE\":{\"statusMessage\":\"\"Status\"\",\"addTime\":\"1294872330\"},\"isFriend\":false,\"isIamFriend\":false}}"

问题出在这里,json字符串包含这个对象:

"STATUS_MESSAGE": {"statusMessage":" "some "bad" value"   ", "addTime" :"1294872330"}

我要修改的字符串的条件:

  • 字符串以 "statusMessage":"开头
  • 字符串可以具有从 0 到 N *的任意长度 *
  • 结尾的字符串", "addTime

所以我尝试为以“statusMessage”开头的字符串编写模式:,具有任意长度并以“,”addTime结尾。

这是它:

 const string pattern = "  \" statusMessage \" : \"  .*?  \",\"addTime\"  ";

 var regex = new Regex(pattern, RegexOptions.IgnoreCase);

//here i would replace " with empty string
 string result = regex.Replace(jsonString, match => ???);

但我认为模式是错误的,我也不知道如何用空字符串替换双引号(删除双引号)。

我的目标是:

"statusMessage":" "some "bad" value"

"statusMessage":""some bad value"

多谢指教

最佳答案

为了在客户端序列化 json,我使用了这样的东西:

    var JSON = JSON || {};  

    JSON.stringify = JSON.stringify || function (obj) {
        var t = typeof (obj);
        if (t != "object" || obj === null) {
            // simple data type  
            if (t == "string") obj = '"' + obj + '"';
            return String(obj);
        }
        else {
            // recurse array or object  
            var n, v, json = [], arr = (obj && obj.constructor == Array);
            for (n in obj) {
                v = obj[n]; t = typeof (v);
                if (t == "string") v = '"' + v + '"';
                else if (t == "object" && v !== null) v = JSON.stringify(v);
                json.push((arr ? "" : '"' + n + '":') + String(v));
            }
            return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
        }
    };

然后

$.ajax({
    ...
    data: JSON.stringify({
        someThing1: [
            { Id: '001', FooValue: ''},
            { Id: '002', FooValue: ''}
        ],
        someThing2: [
            { Id: '001', FooValue: ''},
            { Id: '002', FooValue: ''}
        ]
    }),
    ...
});

在服务器端我使用 Newton.Json ( http://james.newtonking.com/pages/json-net.aspx )

object deserializeObject = JsonConvert.DeserializeObject(requestParameterTextRepresentation, RootType);

如果您没有能力修改客户端脚本以传递正确的 json 字符串,那么您所有的正则表达式都是徒劳的。

关于c# - 用空字符串替换json字符串中的双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4680747/

相关文章:

c# - 表达式获取属性值不需要比反射更快吗?

c# - 如何将方面应用于特定元素(例如,对于 LocationInfo 类型参数或 PropertyInfo)?

java - 如何在字符串中插入特殊字符?

regex - 如何用特殊字符替换字符串中的多个字符

c# - 循环逗号分隔的字符串,分成多个数组?

c# - 定位 "Add Bluetooth Device"的 exe 位置

c# - 从列标题中的 TextBox 筛选 WPF DataGrid 值

javascript - URL 检查正则表达式在浏览器中无限运行

c# - 如何按位置替换字符串的一部分?

c++ - vector 字符串 push_back 在 C++ 中不起作用