首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Newtonsoft JArray -从节点指定的数组中选择多个值

Newtonsoft JArray -从节点指定的数组中选择多个值
EN

Stack Overflow用户
提问于 2020-07-02 03:47:51
回答 1查看 261关注 0票数 1

我想通过skuPartNumber选择值servicePlanNameprovisioningStatus

例如,如果我指定了"skuPartNumber": "POWER_BI_STANDARD",我应该得到以下结果

代码语言:javascript
复制
EXCHANGE_S_FOUNDATION
PendingProvisioning

BI_AZURE_P0
Success

我已经参考了Newtonsoft文档herehere以及堆栈溢出here

这是JSON

代码语言:javascript
复制
{
    "@odata.context": "",
    "value": [
        {
            "id": "00-00-0",
            "skuId": "0-000-0000-00-00000",
            "skuPartNumber": "POWER_BI_STANDARD",
            "servicePlans": [
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "EXCHANGE_S_FOUNDATION",
                    "provisioningStatus": "PendingProvisioning",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "BI_AZURE_P0",
                    "provisioningStatus": "Success",
                    "appliesTo": "Company"
                }
            ]
        },
        {
            "id": "000-0000",
            "skuId": "0-000-00-00-000",
            "skuPartNumber": "STANDARDPACK",
            "servicePlans": [
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "DYN365_CDS_O365_P1",
                    "provisioningStatus": "Success",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "KAIZALA_O365_P2",
                    "provisioningStatus": "Disabled",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "MICROSOFT_SEARCH",
                    "provisioningStatus": "PendingProvisioning",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "WHITEBOARD_PLAN1",
                    "provisioningStatus": "Disabled",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "MYANALYTICS_P2",
                    "provisioningStatus": "Disabled",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "OFFICEMOBILE_SUBSCRIPTION",
                    "provisioningStatus": "Success",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "BPOS_S_TODO_1",
                    "provisioningStatus": "Disabled",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "FORMS_PLAN_E1",
                    "provisioningStatus": "Disabled",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "STREAM_O365_E1",
                    "provisioningStatus": "Success",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "Deskless",
                    "provisioningStatus": "Disabled",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "FLOW_O365_P1",
                    "provisioningStatus": "Disabled",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "POWERAPPS_O365_P1",
                    "provisioningStatus": "Disabled",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "TEAMS1",
                    "provisioningStatus": "Success",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "SHAREPOINTWAC",
                    "provisioningStatus": "Disabled",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "PROJECTWORKMANAGEMENT",
                    "provisioningStatus": "Disabled",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "SWAY",
                    "provisioningStatus": "Disabled",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "INTUNE_O365",
                    "provisioningStatus": "PendingActivation",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "YAMMER_ENTERPRISE",
                    "provisioningStatus": "Success",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "MCOSTANDARD",
                    "provisioningStatus": "Disabled",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "SHAREPOINTSTANDARD",
                    "provisioningStatus": "Disabled",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "EXCHANGE_S_STANDARD",
                    "provisioningStatus": "Success",
                    "appliesTo": "Company"
                }
            ]
        },
        {
            "id": "000000000000000-0000000-000",
            "skuId": "00000000000-0000-0000-0000-00000000000",
            "skuPartNumber": "PROJECTPREMIUM",
            "servicePlans": [
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "PROJECT_PROFESSIONAL",
                    "provisioningStatus": "Success",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "FLOW_FOR_PROJECT",
                    "provisioningStatus": "Success",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "DYN365_CDS_PROJECT",
                    "provisioningStatus": "Success",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "EXCHANGE_S_FOUNDATION",
                    "provisioningStatus": "PendingProvisioning",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "SHAREPOINTWAC",
                    "provisioningStatus": "Success",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "SHAREPOINT_PROJECT",
                    "provisioningStatus": "Success",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "SHAREPOINTENTERPRISE",
                    "provisioningStatus": "Success",
                    "appliesTo": "Company"
                },
                {
                    "servicePlanId": "0000000-0000000-00000-0000-0000000",
                    "servicePlanName": "PROJECT_CLIENT_SUBSCRIPTION",
                    "provisioningStatus": "Success",
                    "appliesTo": "Company"
                }
            ]
        }
    ]
}

我尝试过以下几种方法

代码语言:javascript
复制
   public static async Task<string[]> GetUserApplicationSubscriptionsForSpecificLicence(HttpClient client, string user)
        {
            var payload = await client.GetStringAsync($"https://graph.microsoft.com/v1.0/users/{user}/licenseDetails");
            var obj = JsonConvert.DeserializeObject<JObject>(payload);
   
            var groupDescription = from g in obj["value"].Children()
                                   where g["skuPartNumber"].Contains("STANDARDPACK")
                                   select g["servicePlans"].Children().Value<string>();

            return groupDescription.ToArray();
        }
代码语言:javascript
复制
public static async Task<string[]> GetUserApplicationSubscriptionsForSpecificLicence2(HttpClient client, string user)
        {
            var payload = await client.GetStringAsync($"https://graph.microsoft.com/v1.0/users/{user}/licenseDetails");
            var obj = JsonConvert.DeserializeObject<JObject>(payload);
    
            IList<string> storeNames = obj.SelectToken("$..value[?(@.skuPartNumber== 'PROJECTPREMIUM')]").Select(s => (string)s).ToList();
     
            return storeNames.ToArray();
        }

我无法理解这件事。

如果有人能帮上忙那就太好了!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-02 04:00:05

使用LINQ,你可以这样做:

代码语言:javascript
复制
var result = obj["value"]
        .Children()
        .Where(c => c["skuPartNumber"].Value<string>() == "POWER_BI_STANDARD")
        .Select(c => c["servicePlans"])
        .Where(i => i != null)
        .SelectMany(i => i.Children())
        .Select(c => (planName: c["servicePlanName"], status: c["provisioningStatus"]))
        .ToList();

这将返回两个元组的json集合:

代码语言:javascript
复制
planName                status  
EXCHANGE_S_FOUNDATION   PendingProvisioning 
BI_AZURE_P0             Success 

或者,如果你只想要字符串,你可以这样做:

代码语言:javascript
复制
var strings = obj["value"]
        .Children()
        .Where(c => c["skuPartNumber"].Value<string>() == "POWER_BI_STANDARD")
        .Select(c => c["servicePlans"])
        .Where(i => i != null)
        .SelectMany(i => i.Children())
        .SelectMany(c => new[] { c["servicePlanName"].Value<string>(), c["provisioningStatus"].Value<string>()})
        .ToArray();

使用json路径:

代码语言:javascript
复制
    var strings = obj.SelectTokens("$.value[?(@.skuPartNumber == 'POWER_BI_STANDARD')].servicePlans[*].['servicePlanName','provisioningStatus']")
        .Select(t => t.Value<string>())
        .ToList()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62684335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档