【发布时间】:2011-01-13 13:51:16
【问题描述】:
我对 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"
感谢建议
【问题讨论】:
-
我认为绝对没有机会修复数据源本身?我通常会发现,当机器生成的字符串显示为错误格式时,我不相信来源不会弄乱我没见过的东西。对于 XML 来说尤其如此 - 服务于格式错误的 XML 的数据源通常不会采用使用 XML API 的理智方法,这让我想知道它们在哪里还缺乏理智。我会以同样的方式查看 JSON。
-
如果字符串可以包含冒号和逗号(
:、,),这很可能,我认为问题无法解决 - 您可能会错过整个键和值,或者创建多余的。 -
@Jon Skeet:我没有机会在服务器上纠正 json 格式,我认为使用 regExp 只是一种解决方案。因为我需要将此 json 反序列化为 CLR 对象,所以首先必须是正确格式的 json 字符串。我对正则表达式、json 范围不友好。如果你能帮助我,我会很高兴。
-
@Kobi。我想听到不可能的解决方案;)
-
这是一个示例:这是一个合法的 JSON 属性,只有一个键:
key:"val1\",notkey:\"val2\",dummy:"。你看key:"val1",notkey:"val2",dummy:"- 你怎么知道它是一个单一的值? (我也许能找到一个更简单的例子,但你明白了)
标签: c# regex string json replace