在C#中,我們可以使用多種方法來根據(jù)條件動態(tài)查詢JSON對象字符串?dāng)?shù)據(jù),類似于SQL語句查詢。
- 使用JObject
JObject是Json.NET中的一個類,可以方便地操作JSON對象。通過JObject,我們可以像使用SQL一樣使用LINQ查詢語句來查詢JSON對象。
示例代碼:
using Newtonsoft.Json.Linq;
using System.Linq;
string json = "{\"employees\":[{\"firstName\":\"John\",\"lastName\":\"Doe\"},{\"firstName\":\"Anna\",\"lastName\":\"Smith\"},{\"firstName\":\"Peter\",\"lastName\":\"Jones\"}]}";
JObject jObject = JObject.Parse(json);
var query = from employee in jObject["employees"]
where (string)employee["lastName"] == "Doe"
select employee;
foreach (var employee in query)
{
Console.WriteLine("First Name: {0}, Last Name: {1}", (string)employee["firstName"], (string)employee["lastName"]);
}
- 使用JsonPath
JsonPath是一種基于JSON對象的查詢語言,它可以查詢JSON對象中的各種元素。JsonPath提供了與XPath相似的語法,可以方便地查詢JSON對象中的元素。
示例代碼:
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using System.Collections.Generic;
string json = "{\"employees\":[{\"firstName\":\"John\",\"lastName\":\"Doe\"},{\"firstName\":\"Anna\",\"lastName\":\"Smith\"},{\"firstName\":\"Peter\",\"lastName\":\"Jones\"}]}";
JObject jObject = JObject.Parse(json);
List<JToken> results = jObject.SelectTokens("$..[?(@.lastName == 'Doe')]").ToList();
foreach (var result in results)
{
Console.WriteLine("First Name: {0}, Last Name: {1}", (string)result["firstName"], (string)result["lastName"]);
}
- 使用JsonSerializer
JsonSerializer是Json.NET中的一個類,可以將JSON對象轉(zhuǎn)換為.NET對象。通過JsonSerializer,我們可以將JSON對象轉(zhuǎn)換為.NET對象,并使用LINQ查詢語句查詢.NET對象。
示例代碼:
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Linq;
string json = "{\"employees\":[{\"firstName\":\"John\",\"lastName\":\"Doe\"},{\"firstName\":\"Anna\",\"lastName\":\"Smith\"},{\"firstName\":\"Peter\",\"lastName\":\"Jones\"}]}";
var employees = JsonConvert.DeserializeObject<List<Employee>>(json);
var query = from employee in employees
where employee.LastName == "Doe"
select employee;
foreach (var employee in query)
{
Console.WriteLine("First Name: {0}, Last Name: {1}", employee.FirstName, employee.LastName);
}
public class Employee
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
使用 Json.NET 庫中的 LINQ to JSON 功能。LINQ to JSON 允許我們使用 LINQ 查詢語法來查詢和修改 JSON 對象。以下是一個使用 LINQ to JSON 的示例:
using Newtonsoft.Json.Linq;
using System;
using System.Linq;
namespace JsonLinqQuery
{
class Program
{
// 示例 JSON 字符串
string json = @"
{
""code"": ""0"",
""message"": ""操作成功!"",
""data"": [
{
""itemStockId"": 532023004329,
""itemType"": 4,
""stockSkuId"": 532023000003,
""stockDate"": ""2023-04-15"",
""startTime"": ""09:30"",
""endTime"": ""11:30"",
""stockCount"": 0,
""usedCount"": 300
},
{
""itemStockId"": 532023004330,
""itemType"": 4,
""stockSkuId"": 532023000004,
""stockDate"": ""2023-04-16"",
""startTime"": ""10:00"",
""endTime"": ""12:00"",
""stockCount"": 100,
""usedCount"": 0
}
]
}";
// 解析 JSON 字符串為 JToken 對象
JToken token = JToken.Parse(json);
// 使用 LINQ to JSON 查詢庫存數(shù)量大于 0 的數(shù)據(jù)
var result = token["data"].Where(x => (int)x["stockCount"] > 0).ToList();
// 輸出查詢結(jié)果
Console.WriteLine($"查詢結(jié)果:{result}");
}
}
}
查詢結(jié)果:[ ?{ ? ?"itemStockId": 532023004330, ? ?"itemType": 4, ? ?"stockSkuId": 532023000004, ? ?"stockDate": "2023-04-16", ? ?"startTime": "10:00", ? ?"endTime": "12:00", ? ?"stockCount": 100, ? ?"usedCount": 0 ?}]
使用 LINQ to JSON 進(jìn)行動態(tài)查詢也非常方便。我們只需要將 JSON 字符串解析為 JToken 對象,然后就可以使用 LINQ 查詢語法來查詢所需數(shù)據(jù)。值得注意的是,使用 LINQ to JSON 查詢的好處是可以直接獲取到符合條件的 JSON 對象,而不是只返回符合條件的屬性。這樣,我們就可以更方便地進(jìn)行后續(xù)的處理和操作。
優(yōu)點與缺點:
-
LINQ to JSON: 優(yōu)點:語法簡單易懂,易于上手,支持動態(tài)構(gòu)造查詢條件。 缺點:需要手動編寫代碼實現(xiàn),相對繁瑣,難以維護(hù),對于復(fù)雜的查詢條件需要編寫復(fù)雜的代碼。
-
JArray/JObject: 優(yōu)點:語法簡單易懂,易于上手,支持動態(tài)構(gòu)造查詢條件,可直接使用JsonConvert.DeserializeObject將JSON字符串轉(zhuǎn)換為對象。 缺點:需要手動編寫代碼實現(xiàn),相對繁瑣,難以維護(hù),對于復(fù)雜的查詢條件需要編寫復(fù)雜的代碼。
-
JSONPath: 優(yōu)點:語法簡單,易于上手,支持動態(tài)構(gòu)造查詢條件,支持多種操作符和通配符,查詢語句簡單易讀。 缺點:需要引入第三方庫,對于不熟悉JSONPath的人來說學(xué)習(xí)成本較高。
-
JQL: 優(yōu)點:語法類似SQL語句,易于理解,查詢語句簡單易讀,支持動態(tài)構(gòu)造查詢條件,支持多種操作符和函數(shù)。 缺點:需要引入第三方庫,相對較新,社區(qū)支持不夠成熟,可能存在一些潛在的問題。文章來源:http://www.zghlxwxcb.cn/news/detail-412775.html
使用JObject、使用JsonPath和使用JsonSerializer或者使用LINQ to JSON 。這三種方法各有優(yōu)劣,可以根據(jù)具體的業(yè)務(wù)需求選擇使用。文章來源地址http://www.zghlxwxcb.cn/news/detail-412775.html
到了這里,關(guān)于JSON對象字符串在C#中進(jìn)行像sql一樣動態(tài)查詢的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!