如何对JSON字符串执行投影?如何查询JSON提取指定属性?
针对你提出的两个JSON操作问题(执行投影操作、查询选择特定属性),结合你给出的C#场景,我给你整理了几种实用的解决办法,帮你提取出目标的count属性数组:
方法1:使用Newtonsoft.Json(Json.NET)
这是.NET生态里非常常用的JSON处理库,灵活性很高。如果还没安装,直接在NuGet包管理器中搜索Newtonsoft.Json安装即可。
using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.Linq; // 你的原始JSON字符串 string JsonObj = Converter.ConvertDataTabletoString(DT); // 解析JSON为JArray JArray jsonArray = JArray.Parse(JsonObj); // 提取每个对象的count属性,转换为double列表 var countValues = jsonArray.Select(item => (double)item["count"]).ToList(); // 序列化为你需要的JSON格式字符串 string resultJson = JsonConvert.SerializeObject(countValues); // 输出结果就是 "[21.23,11.93,8.49]"
方法2:使用System.Text.Json(.NET Core 3.0+ 内置)
如果你的项目是.NET Core 3.0及以上版本,或者是.NET 5+,可以直接用内置的System.Text.Json,无需额外安装第三方库:
using System.Text.Json; using System.Linq; // 原始JSON字符串 string JsonObj = Converter.ConvertDataTabletoString(DT); // 解析JSON文档 using var jsonDoc = JsonDocument.Parse(JsonObj); // 遍历数组提取count属性值 var countValues = jsonDoc.RootElement.EnumerateArray() .Select(element => element.GetProperty("count").GetDouble()) .ToList(); // 序列化为目标JSON字符串 string resultJson = JsonSerializer.Serialize(countValues);
方法3:直接在DataTable阶段处理(更高效)
既然你的JSON是从DataTable转换来的,其实完全可以跳过JSON转换的步骤,直接从DataTable中提取count值,这样能节省JSON解析和序列化的开销,性能更好:
using System.Linq; using System.Data; // 假设你的原始DataTable是DT var countValues = DT.AsEnumerable() .Select(row => row.Field<double>("count")) .ToList(); // 再转换为你需要的JSON字符串 string resultJson = JsonConvert.SerializeObject(countValues); // 或者用System.Text.Json.JsonSerializer.Serialize
简单来说,JSON的投影操作就是从复杂的JSON结构中筛选出你需要的特定字段,这里我们就是把数组中每个对象的count值单独提取出来,组成一个新的数值数组,正好满足你的需求。
内容的提问来源于stack exchange,提问作者Anyname Donotcare
相关产品推荐
相关产品推荐

