C# 动态JSON查询JSON.NET
我有一段JSON:C# 动态JSON查询JSON.NET,c#,json,linq,json.net,C#,Json,Linq,Json.net,我有一段JSON: { "grid": 4, "rows": [ { "label": "Full Width", "name": "FullWidth", "areas": [ { "grid": 16, "hasConfig": false,
{
"grid": 4,
"rows": [
{
"label": "Full Width",
"name": "FullWidth",
"areas": [
{
"grid": 16,
"hasConfig": false,
"controls": [
{
"value": "Test",
"editor": {
"name": "Headline",
"alias": "headline",
"view": "textstring",
"render": null,
"icon": "icon-coin",
"config": {
"style": "font-size: 36px; line-height: 45px; font-weight: bold",
"markup": "<h1>#value#</h1>"
}
},
"active": false
},
{
"value": "Test",
"editor": {
"name": "Headline",
"alias": "headline",
"view": "textstring",
"render": null,
"icon": "icon-coin",
"config": {
"style": "font-size: 36px; line-height: 45px; font-weight: bold",
"markup": "<h1>#value#</h1>"
}
},
"active": false
}
],
"active": false
}
],
"hasConfig": false,
"id": "e0f6ab79-f562-b86b-f32b-d5520173f0cb",
"active": false
}
]
}
{
“网格”:4,
“行”:[
{
“标签”:“全宽”,
“名称”:“全宽”,
“地区”:[
{
“网格”:16,
“hasConfig”:false,
“控制措施”:[
{
“值”:“测试”,
“编辑”:{
“名称”:“标题”,
“别名”:“标题”,
“视图”:“文本字符串”,
“呈现”:空,
“图标”:“图标硬币”,
“配置”:{
“风格”:“字体大小:36px;行高:45px;字体重量:粗体”,
“标记”:“#值#”
}
},
“活动”:错误
},
{
“值”:“测试”,
“编辑”:{
“名称”:“标题”,
“别名”:“标题”,
“视图”:“文本字符串”,
“呈现”:空,
“图标”:“图标硬币”,
“配置”:{
“风格”:“字体大小:36px;行高:45px;字体重量:粗体”,
“标记”:“#值#”
}
},
“活动”:错误
}
],
“活动”:错误
}
],
“hasConfig”:false,
“id”:“e0f6ab79-f562-b86b-f32b-d5520173f0cb”,
“活动”:错误
}
]
}
我想知道是否有任何行(可以是多行)具有任何控件(计数>0)。我不需要知道任何字段中包含的内容,只要任何行的控制计数大于0,那么只需知道true或false。我一直在尝试使用LINQ查询来实现这一点,但进展并不快
这个JSON是动态的,所以我不能反序列化它。任何帮助都将不胜感激!:) 您可以这样做:
string json = @"{
'grid': 4,
'rows': [
{
'label': 'Full Width',
'name': 'FullWidth',
'areas': [
{
'grid': 16,
'hasConfig': false,
'controls': [
{
'value': 'Test',
'editor': {
'name': 'Headline',
'alias': 'headline',
'view': 'textstring',
'render': null,
'icon': 'icon-coin',
'config': {
'style': 'font-size: 36px; line-height: 45px; font-weight: bold',
'markup': '<h1>#value#</h1>'
}
},
'active': false
},
{
'value': 'Test',
'editor': {
'name': 'Headline',
'alias': 'headline',
'view': 'textstring',
'render': null,
'icon': 'icon-coin',
'config': {
'style': 'font-size: 36px; line-height: 45px; font-weight: bold',
'markup': '<h1>#value#</h1>'
}
},
'active': false
}
],
'active': false
}
],
'hasConfig': false,
'id': 'e0f6ab79-f562-b86b-f32b-d5520173f0cb',
'active': false
}
]
}";
var jobject = JObject.Parse(json);
var test = jobject
.Descendants()
.Where(t => t.Type == JTokenType.Property && ((JProperty)t).Name == "controls"
&& t.Ancestors()
.Any(a => a.Type == JTokenType.Property && ((JProperty)a).Name == "rows"))
.Any();
stringjson=@{
“网格”:4,
“行”:[
{
“标签”:“全宽”,
'name':'FullWidth',
“地区”:[
{
“网格”:16,
'hasConfig':false,
“控件”:[
{
“值”:“测试”,
'编辑':{
“名称”:“标题”,
“别名”:“标题”,
“视图”:“文本字符串”,
“呈现”:null,
“图标”:“图标硬币”,
'配置':{
'style':'font size:36px;lineheight:45px;font-weight:bold',
“标记”:“值”
}
},
“活动”:false
},
{
“值”:“测试”,
'编辑':{
“名称”:“标题”,
“别名”:“标题”,
“视图”:“文本字符串”,
“呈现”:null,
“图标”:“图标硬币”,
'配置':{
'style':'font size:36px;lineheight:45px;font-weight:bold',
“标记”:“值”
}
},
“活动”:false
}
],
“活动”:false
}
],
'hasConfig':false,
“id”:“e0f6ab79-f562-b86b-f32b-d5520173f0cb”,
“活动”:false
}
]
}";
var jobject=jobject.Parse(json);
var测试=jobject
.后代()
.Where(t=>t.Type==JTokenType.Property&((JProperty)t).Name==“控件”
&&t.祖先()
.Any(a=>a.Type==JTokenType.Property&((JProperty)a.Name==“行”))
.Any();
将其解析为一个
作业对象
,查找名为的子体
“控件”
,该子体有一个名为的父(祖先)
“行”<代码>测试如果是,则显示为真;如果不是,则显示为假 您可以这样做:
string json = @"{
'grid': 4,
'rows': [
{
'label': 'Full Width',
'name': 'FullWidth',
'areas': [
{
'grid': 16,
'hasConfig': false,
'controls': [
{
'value': 'Test',
'editor': {
'name': 'Headline',
'alias': 'headline',
'view': 'textstring',
'render': null,
'icon': 'icon-coin',
'config': {
'style': 'font-size: 36px; line-height: 45px; font-weight: bold',
'markup': '<h1>#value#</h1>'
}
},
'active': false
},
{
'value': 'Test',
'editor': {
'name': 'Headline',
'alias': 'headline',
'view': 'textstring',
'render': null,
'icon': 'icon-coin',
'config': {
'style': 'font-size: 36px; line-height: 45px; font-weight: bold',
'markup': '<h1>#value#</h1>'
}
},
'active': false
}
],
'active': false
}
],
'hasConfig': false,
'id': 'e0f6ab79-f562-b86b-f32b-d5520173f0cb',
'active': false
}
]
}";
var jobject = JObject.Parse(json);
var test = jobject
.Descendants()
.Where(t => t.Type == JTokenType.Property && ((JProperty)t).Name == "controls"
&& t.Ancestors()
.Any(a => a.Type == JTokenType.Property && ((JProperty)a).Name == "rows"))
.Any();
stringjson=@{
“网格”:4,
“行”:[
{
“标签”:“全宽”,
'name':'FullWidth',
“地区”:[
{
“网格”:16,
'hasConfig':false,
“控件”:[
{
“值”:“测试”,
'编辑':{
“名称”:“标题”,
“别名”:“标题”,
“视图”:“文本字符串”,
“呈现”:null,
“图标”:“图标硬币”,
'配置':{
'style':'font size:36px;lineheight:45px;font-weight:bold',
“标记”:“值”
}
},
“活动”:false