我正在尝试解析我使用c#从他们的Rest API获取的Google日历回复,但我似乎一直陷入困境。 [已编辑]更新,@符号并未阻止向下钻取,我通过将@
替换为_at_
进行了验证。查看快速手表的屏幕截图:
我确定我错误地访问了这个...
这是jsonString
我试图解析的问题:
{
"kind": "calendar#freeBusy",
"timeMin": "2015-06-12T14:00:00.000Z",
"timeMax": "2015-06-14T14:00:00.000Z",
"calendars": {
"joe@bobs.com": {
"busy": [
{
"start": "2015-06-13T18:30:00Z",
"end": "2015-06-13T19:30:00Z"
},
{
"start": "2015-06-13T20:30:00Z",
"end": "2015-06-13T21:30:00Z"
},
{
"start": "2015-06-13T23:00:00Z",
"end": "2015-06-14T00:00:00Z"
}
]
}
}
}
我尝试过使用:
dynamic myObj = Json.Decode(jsonString);
和
var myObj = JsonConvert.DeserializeObject(jsonString);
但是我无法弄清楚如何进入joe@bobs.com
键(基于我发送的内容是动态的)来循环所有忙碌时间。
想法?
答案 0 :(得分:3)
您可以通过字符串索引器访问它:
var myObj = JsonConvert.DeserializeObject<dynamic>(jsonString);
Console.WriteLine(myObj.calendars["joe@bobs.com"]);
答案 1 :(得分:0)
我过去曾处理过类似的问题,但我的问题是连字符,我只是用下划线代替连字符。您可能会做类似的事情但是看到它是一个电子邮件地址,修改架构可能会更好(正则表达式看到您从第三方API接收json)创建一个新的密钥“mail”以便您可以确保您保持原始电子邮件地址的完整。
但也许更重要的是,当您查询此API时,您可能已经知道该电子邮件,如果是这样,您可以简单地进行正则表达式替换:
string json = '... {"joe@bobs.com":...}...';
Regex regex = new Regex(@"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b");
string jsonfixed = regex.Replace(json, "email");