C# 使用LINQ解析JSON
我的json数据如下所示C# 使用LINQ解析JSON,c#,json.net,C#,Json.net,我的json数据如下所示 { "data":{ "foo":{ "sfoo":"1", "active":1 }, "foo":{ "sfoo":"2", "active":0 }, "v":"v1" } } 我尝试使用以下代码从json获取值: JObject _JObject = JObject.Parse(_JsonString); var _
{
"data":{
"foo":{
"sfoo":"1",
"active":1
},
"foo":{
"sfoo":"2",
"active":0
},
"v":"v1"
}
}
我尝试使用以下代码从json获取值:
JObject _JObject = JObject.Parse(_JsonString);
var _JItems = _JObject.SelectToken("data[0].foo")
.Select(s => new
{
_Sfoo = (string)s.SelectToken("sfoo"),
_WhereClause = (string)s.SelectToken("active")
})
.Where(w => w._WhereClause == "1");
foreach (var _JItem in _JItems)
{
MessageBox.Show(_JItem._Sfoo.ToString());
}
我收到一个错误,如“附加信息:值不能为空。”
提前谢谢。正如我所评论的,
数据是一个对象({}
),而不是数组([]
)。您看到一个错误,因为对象data
没有定义属性0
您似乎希望JSON看起来像这样:
{
"data":{
"foo":[
{
"sfoo":"1",
"active":1
},
{
"sfoo":"2",
"active":0
}
],
"v":"v1"
}
}
然后您的解析代码将如下所示:
var _JItems = _JObject.SelectToken("data.foo")
.Select(s => new
{
_Sfoo = (string)s.SelectToken("sfoo"),
_WhereClause = (string)s.SelectToken("active")
})
.Where(w => w._WhereClause == "1");
data
不是数组,对象data
的第一个foo
属性将被第二个foo
属性覆盖。也许你想让数据成为一个数组?谢谢,但当我检查这个url@Kerberos时,它似乎是有效的。根据你的意图,语法正确与正确之间存在差异。@Kerberos:正如iamkrillin所说,你的JSON是有效的,你只是没有正确访问它。