我试图从json字符串中检索一个json项,例如这是我的json:
echos
我使用的是json.net库,这是我迄今为止尝试过的:
{
"users":{
"john":{
"password":"0506777031",
"level":1
},
"doe":{
"password":"john",
"level":1
},
"dasda":{
"password":"das",
"level":"1"
},
"zuri":{
"password":"zuri123",
"level":2
}
}
}
我在第二行收到错误。 这是错误:
无法将Newtonsoft.Json.Linq.JProperty转换为Newtonsoft.Json.Linq.JToken。
我不确定我做错了什么,我将不胜感激!谢谢!
答案 0 :(得分:3)
假设你的问题是"我做错了什么?",答案是
如果示例中的用户名是属性键(名称)" john"," doe"," dasda"和" zuri" ...您可能想要的查询如下:
var match = json["users"].Values<JProperty>().Where(m => m.Name == "doe" && m.Value["password"].ToString() == "john").FirstOrDefault();
编辑:或者,如果用户名是该密钥,则只有在密码与您要比较的密码匹配时,才可以使用直接查找并分配给变量匹配。此外,以下版本将返回JObject而不是JProperty,因为它似乎是您最初想要的。这也应该更有效率。
JObject match;
var temp = json["users"]["doe"];
if(temp["password"].ToString() == "john")
{
match = temp.ToObject<JObject>();
}
答案 1 :(得分:0)
不应该使用方括号用于&#34;用户&#34;?
{
"users":[
"john":{
"password":"0506777031",
"level":1
},
"doe":{
"password":"john",
"level":1
},
"dasda":{
"password":"das",
"level":"1"
},
"zuri":{
"password":"zuri123",
"level":2
}
]
}