c# - 解析 JSON 并应用过滤器
问题描述
我ObservableCollection<dynamic>
在 C# 中调用了 myJSON,有 4 项如下:
[
{
"name": "A",
"location": "NY"
},
{
"name": "B",
"location": "NJ"
},
{
"name": "A",
"location": "NY"
},
{
"name": "D",
"location": "MA"
}
]
我需要能够应用过滤查询,例如说 where name="A" 和 location="NY",然后从上面取回 2 条记录。
我尝试了如下代码,但我一次只能从上述集合中解析一条记录。而且第 2 行似乎出错了一条消息:
“无法访问 Newtonsoft.Json.Linq.JValue 上的子值。”
JObject json = JObject.Parse(myJSON[0].ToString());
var match = json.Values<JProperty>().Where(m => m.Value["name"].ToString() == "A" && m.Value["location"].ToString() == "NY").FirstOrDefault();
谢谢。
解决方案
这里:
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using Newtonsoft.Json;
namespace NameLoc
{
class Program
{
class NameLoc
{
public string Name;
public string Location;
}
static void Main(string[] args)
{
var lst = JsonConvert.DeserializeObject<ObservableCollection<NameLoc>>(File.ReadAllText("NameLoc.json"));
var selLst = from sel in lst where sel.Name == "A" && sel.Location == "NY" select sel;
foreach (var it in selLst)
{
Console.WriteLine($"{it.Name}, {it.Location}");
}
Console.WriteLine("Hello World!");
}
}
}
然后一定要添加一个文件“NameLoc.Json”设置构建操作复制到输出我发现你的json中的错误在下面更正了。将 Newtonsoft.json 添加到 pkgs
[
{
"name": "A",
"location": "NY"
},
{
"name": "B",
"location": "NJ"
},
{
"name": "A",
"location": "NY"
},
{
"name": "D",
"location": "MA"
}
]
推荐阅读
- c# - AutoMapper 强制为空
- android - groovy.lang.MissingMethodException:没有方法签名:ApplicationVariantData.getName()
- java - 是否有可能将并行测试的 xml 结果与surefire一起运行?
- apache-kafka - 用于 kafka-sink 连接发现属性的 Apache-Ignite XML 配置
- linux - systemd 和 ExecStart 带有解析错误的参数
- faye - Faye 有内部认证和授权吗?
- ruby-on-rails - 如何在 Rails 6 中使用 Webpackers 安装模板(CSS 和 JS)?
- python - SSL 证书验证失败:无法获取本地颁发者证书
- flutter - 颤动将http.get放在哪里
- python - 如何在跳过不必要的元素时检查列表中的所有元素是否在另一个列表中