这里有一个小问题相对新手。我一直在提取一个看起来像这样的json字符串(在这种情况下,它是来自Facebook oauth2的修改后的返回。
{ “ID”: “555555555555555”, “名称”:“猴 人 “ ”姓氏“: ”人“, ”FIRST_NAME“: ”西游记“, ”电子邮件“: ”测试\ u0040someaccount.com“, ”位置“:{ ”ID“: ”555555555555555“, ”名“:” 丛林, 北 卡罗来纳州 “},” 性别 “:” 男 “ ”工作“:[{ ”雇主“:{ ”ID“: ”555555555555555“, ”名“:” 大 老板让我工作“}:”项目“:{”当前“:”做事“, “前面的”:“其他 东西“},”location“:{”id“:”555555555555555“,”name“:”丛林,北方 卡罗来纳州 “},” 位置 “:{” ID “:” 555555555555555" , “名”:“IT 猴 “},” 起始日期 “:” 2010-09 “}],” 图象 “:” http://profile.ak.fbcdn.net/static-ak/rsrc.php/v1/yo/r/5555555-555 .gif注意“}
我可以使用以下代码
将所有内容解压缩到字典中 JavaScriptSerializer ser = new JavaScriptSerializer();
Dictionary<string, object> dict = ser.Deserialize<Dictionary<string,object>>(json);
然后我从字典中提取数据,并将它们存储在一个名为contact的对象中,该对象几乎只是一个字符串集合。
if (d.ContainsKey("email"))
{
c.email = d["email"].ToString();
}
else
c.email = "";
我是这样做的,因为我没有得到信息,所以信息领域都将存在。
如果在该值中设置了一个对象,例如地址,我使用了修改后的代码(感谢那些向我展示如何操作的人),如下所示。
c.location = (d["location"] as Dictionary<string, object>)["name"].ToString();
现在我遇到困难的部分。
我正试图从字符串的以下部分提取雇主名称“Big Boss让我工作”......
“work”:[{“雇主”:{“id”:“555555555555555”,“名字”:“Big Boss让我 work“}:”projects“:{”current“:”doing stuff“,”previous“:”other 东西“},”location“:{”id“:”555555555555555“,”name“:”丛林,北方 卡罗来纳州 “},” 位置 “:{” ID “:” 555555555555555" , “名”:“IT 猴 “},” 起始日期 “:” 2010-09" }]
它将数据存储在其他对象内的数组中,我不知道如何获取信息来提取它,甚至不知道如何从live oauth2中提取这样的信息......
“地址”:{“personal”:{“street”:null,“street_2”:null,“city”: “Jungle”,“state”:“NC”,“postal_code”:“28677”,“region”:“United 国家“},”business“:{”street“:”Tree Street“,”street_2“:null, “城市”:“丛林”,“州”:“NC”,“postal_code”:“28677”,“地区”: “美国”}}
正如你所看到的那样深入三级,所以我的(d [“location”]为Dictionary)[“name”]。ToString();这里很无用。你怎么会从这里说出街道名称?
我希望我的问题不会太模糊或随意。我只需要一些关于从字典对象中正确提取数据的建议。我提出的方法涉及编辑json字符串并导致各种问题,因为我只是不能很好地理解字典对象以便自己解决这个问题
由于
答案 0 :(得分:3)
通过jsonlint.com运行您的JSON(并稍微纠正),它看起来像这样:
{
"id": "555555555555555",
"name": "Monkey Man",
"last_name": "Man",
"first_name": "Monkey",
"email": "test@someaccount.com",
"location": {
"id": "555555555555555",
"name": "Jungle, North Carolina"
},
"gender": "male",
"work": [
{
"employer": {
"id": "555555555555555",
"name": "Big Boss makes me work"
},
"projects": {
"current": "doing stuff",
"previous": "other stuff"
},
"location": {
"id": "555555555555555",
"name": "Jungle, North Carolina"
},
"position": {
"id": "555555555555555",
"name": "IT monkey"
},
"start_date": "2010-09"
}
],
"picture": "http://profile.ak.fbcdn.net/static-ak/rsrc.php/v1/yo/r/5555555-555.gif"
}
在这种情况下,你的JSON数据不适合被序列化为一个简单的Dictionary对象,所以这不是真正的方法。
更简单的方法是创建一个C#类,它定义的属性与您要解串的Javascript对象相同。然后,将JSON反序列化为该对象,您应该能够访问“”Big Boss让我工作“值应该在objectFromJson.work[0].employer.name
。