我用.NET捕获了一个JSON:
string result = json_serializer.Deserialize(myJSON);
JSON的结构如下:
result
data[0]
user
bio
name
nickname
data[1]
user
bio
name
nickname
data[2]
user
bio
name
nickname
我想得到第一个有一些价值的昵称(作为字符串):我的意思是,它不是空的而且不是空的。
我该怎么做?
答案 0 :(得分:2)
根据我对你的问题的理解,你会想要这样的东西,
public string FirstUserNickname(string JsonUserInfo)
{
JavaScriptSerializer JsonSerializer = new JavaScriptSerializer();
ResultData Results = JsonSerializer.Deserialize<ResultData>(JsonUserInfo);
foreach (UserInfo UserInfo in Results.result)
{
if (string.IsNullOrEmpty(UserInfo.nickname))
return UserInfo.nickname;
}
return null;
}
public class ResultData
{
public List<UserInfo> result;
}
public class UserInfo
{
public string bio;
public string name;
public string nickname;
}
这将实现您的目标,并且是一种强类型方法,使用JavaScriptSerializer
程序集中的System.Web.Extensions
类,可以找到更多信息here。
答案 1 :(得分:1)
您可以使用Linq to JSON(搜索NuGet for Newtonsoft Json)。假设你的JSON看起来像:
{ "result": [ { "bio": "foo", "name": "Robin", "nickname": "Moll" },
{ "bio": "bar", "name": "Ted", "nickname": "DoctorZ" },
{ "bio": "moo", "name": "Barney", "nickname": "Wait4it" } ]
}
然后获取第一个用户的名字:
JObject jo = JObject.Parse(json);
var name = (string)jo["result"][0]["name"]; // Robin
当然,如果您可能没有任何用户,那么您应该验证该用户是否存在:
JObject jo = JObject.Parse(json);
var user = jo["result"].FirstOrDefault();
if (user != null)
name = (string)user["name"];
答案 2 :(得分:1)
使用Linq to JSON可以反序列化为.net对象,如下所示:
Result deserializedResult = JsonConvert.DeserializeObject<Result>(json);
之后,您可以使用LINQ查询对象:
User nicknameduser = deserializedResult.Users
.FirstOrDefault(r => !string.IsNullOrEmpty(r.nickname))
if (nicknameduser == null) return null;
return nicknameduser.nickname;