c# - 如何使用 linq 搜索 json 响应以查看值是否存在?
问题描述
我有以下 json 响应
{
"Id": "1234",
"Name": "Test",
"Orders": [
{
"OrderId": "87654",
"OrderDetails": {
"OrdId": "1234",
"Name": "Desk"
}
},
{
"OrderId": "54213",
"OrderDetails": {
"OrdId": "4321",
"Name": "Table"
}
}
]
}
我想搜索订单列表,看看是否有 87654 的 OrderId。我可以使用数组,但如何使用 Linq 呢?
解决方案
您可以使用 Newtonsoft.Json 将 json 字符串反序列化为 JObject,然后遍历订单以获取 OrderID。
var obj = JObject.Parse(json);
foreach(var order in obj["Orders"])
{
Console.WriteLine(order["OrderId"]);
}
或者您可以使用 Where 子句。
var myOrder = obj["Orders"].Where(x => x["OrderId"].ToString().Equals("87654")).FirstOrDefault();
然后您可以打印该订单的任何属性,
Console.WriteLine(myOrder["OrderDetails"]["Name"].ToString());
// Prints: Desk
或者,您可以:还使用类来反序列化您拥有的 json 并查询订单。
public class OrderDetails
{
public string OrdId { get; set; }
public string Name { get; set; }
}
public class Order
{
public string OrderId { get; set; }
public OrderDetails OrderDetails { get; set; }
}
public class RootObject
{
public string Id { get; set; }
public string Name { get; set; }
public List<Order> Orders { get; set; }
}
public static void Main(string[] args)
{
string json = File.ReadAllText(@"C:\temp\json.txt");
var obj = JsonConvert.DeserializeObject<RootObject>(json);
var myOrder = obj.Orders.FirstOrDefault(x => x.OrderId.Equals("87654"));
if (myOrder != null)
{
Console.WriteLine(myOrder.OrderDetails.Name);
}
}
推荐阅读
- php - 编辑默认的 Wordpress 密码重置电子邮件
- angularjs - 删除 Git 存储库中的文件但文件不存在
- pandas - 熊猫数据框 to_parquet - 不知道如何转换数据类型:Int64
- php - Long delay when my jQuery function fires due to a large amount of values in my select form elements
- javascript - Vuetify 使标签离控件太近
- javascript - 如何在 ReactJS 的类基组件中以两种方式数据绑定传递数据?
- c# - WriteLineAsync 或 ReadAsync 无法读取 TCP Communicator C# 的字符串
- java - 使用 Iterator 对 ArrayList 进行迭代,其中 while 条件搜索 .contains() 并失败
- node.js - 遍历数组并一次显示一个 React 组件
- api - API 调用中的 GET 方法以保留标头