动态JSON查询JSON.NET

时间:2017-03-06 16:48:14

标签: c# json linq json.net

我有这条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 
        } 
    ] 
}

我想知道是否有任何行(可能是多行)有任何控件(Count&gt; 0)。我不需要知道任何字段中包含的内容,只要任何行的控制计数为&gt; 0 - 所以只是真或假。我一直在尝试使用LINQ查询实现这一点,但没有快速到达!

这个JSON是动态的,所以我无法反序列化它。任何帮助将不胜感激! :)

2 个答案:

答案 0 :(得分:2)

使用@dbc给出的链接结束 - 这是我的代码:

JObject sideBar = JObject.Parse(sidebarContentCol.ToString());

IEnumerable<JToken> sidebarControls = sideBar.SelectTokens("$.rows[*].areas[*].controls[*]");

var controls = (bool)(sidebarControls.Count() == 0);

答案 1 :(得分:0)

你可以这样做:

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();

将其解析为JObject,查找名为Descendant的{​​{1}},其父级(祖先)名为"controls"。如果是,"rows"将成立,如果不是,则为假。