如何使用 LINQ 查询此 JSON 字符串?
How do I query this JSON string using LINQ?
我是 LINQ 的新手,并且在查询 JSON 有效负载时进行了一些 SO 搜索,但没有找到我需要的任何东西。下面是我的JSON。我将 .NET 与 Newtonsoft 库一起使用。查询条件为:
1) 有多少 LogResults 的统计数据 "Frequency" 值为 "Low"? (在这种情况下,1)
2) 如果恰好有 1 个 LogResult "Frequency" = "Low", select 扁平对象中的所有属性 (ID, FName, LName, Frequency, LowRange, HighRange , 温度, 风)
是否可以在 1 个查询中回答这些问题?
这是示例 JSON,LogResults 数组中有 2 个条目。该数组将始终包含至少 1 个条目,并且可能包含更多条目。
{
"LogResults":[
{
"ID":300,
"FName":"Jim",
"LName":"Smith",
"Stats":{
"Frequency":"Low",
"LowRange":"1",
"HighRange":"100",
"Parameters":{
"Temp":"32",
"Wind":"5"
}
}
},
{
"ID":400,
"FName":"John",
"LName":"Warren",
"Stats":{
"Frequency":"Medium",
"LowRange":"1",
"HighRange":"100",
"Parameters":{
"Temp":"21",
"Wind":"15"
}
}
}
]
}
如果你可以使用 json.net
你可以用 linq 查询 json:
// Parse json first.
JObject o = JObject.Parse(json);
1) How many LogResults have a stat "Frequency" of value "Low"? (in this case, 1)
var result1 =
o["LogResults"]
.Where(t => t["Stats"].Value<string>("Frequency") == "Low")
.ToList();
2) If there is exactly 1 LogResult with "Frequency" = "Low", select all the properties in a flattened object (ID, FName, LName, Frequency, LowRange, HighRange, Temp, Wind)
if (result1.Count == 1)
{
var result2 = result1.Select(t => new
{
ID = t.Value<string>("ID"),
FName = t.Value<string>("FName"),
LName = t.Value<string>("LName"),
Frequency = t["Stats"].Value<string>("Frequency"),
LowRange = t["Stats"].Value<string>("LowRange"),
HighRange = t["Stats"].Value<string>("HighRange"),
Temp = t["Stats"]["Parameters"].Value<string>("Temp"),
Wind = t["Stats"]["Parameters"].Value<string>("Wind")
}).ToList();
}
其他示例以及如何以声明方式创建 json 您可以在其 LINQ to JSON 文档中找到。
我是 LINQ 的新手,并且在查询 JSON 有效负载时进行了一些 SO 搜索,但没有找到我需要的任何东西。下面是我的JSON。我将 .NET 与 Newtonsoft 库一起使用。查询条件为:
1) 有多少 LogResults 的统计数据 "Frequency" 值为 "Low"? (在这种情况下,1)
2) 如果恰好有 1 个 LogResult "Frequency" = "Low", select 扁平对象中的所有属性 (ID, FName, LName, Frequency, LowRange, HighRange , 温度, 风)
是否可以在 1 个查询中回答这些问题? 这是示例 JSON,LogResults 数组中有 2 个条目。该数组将始终包含至少 1 个条目,并且可能包含更多条目。
{
"LogResults":[
{
"ID":300,
"FName":"Jim",
"LName":"Smith",
"Stats":{
"Frequency":"Low",
"LowRange":"1",
"HighRange":"100",
"Parameters":{
"Temp":"32",
"Wind":"5"
}
}
},
{
"ID":400,
"FName":"John",
"LName":"Warren",
"Stats":{
"Frequency":"Medium",
"LowRange":"1",
"HighRange":"100",
"Parameters":{
"Temp":"21",
"Wind":"15"
}
}
}
]
}
如果你可以使用 json.net
你可以用 linq 查询 json:
// Parse json first.
JObject o = JObject.Parse(json);
1) How many LogResults have a stat "Frequency" of value "Low"? (in this case, 1)
var result1 =
o["LogResults"]
.Where(t => t["Stats"].Value<string>("Frequency") == "Low")
.ToList();
2) If there is exactly 1 LogResult with "Frequency" = "Low", select all the properties in a flattened object (ID, FName, LName, Frequency, LowRange, HighRange, Temp, Wind)
if (result1.Count == 1)
{
var result2 = result1.Select(t => new
{
ID = t.Value<string>("ID"),
FName = t.Value<string>("FName"),
LName = t.Value<string>("LName"),
Frequency = t["Stats"].Value<string>("Frequency"),
LowRange = t["Stats"].Value<string>("LowRange"),
HighRange = t["Stats"].Value<string>("HighRange"),
Temp = t["Stats"]["Parameters"].Value<string>("Temp"),
Wind = t["Stats"]["Parameters"].Value<string>("Wind")
}).ToList();
}
其他示例以及如何以声明方式创建 json 您可以在其 LINQ to JSON 文档中找到。