用于从 JSON 数组响应中提取特定项目的 APIM 策略示例

问题描述 投票:0回答:1

我有一个 JSON 数组响应,返回类似于以下内容的值:

[
    {
        "code": "SCH",
        "title": "School Email",
        "emailType": "school",
        "id": "123455"
    },
    {
        "code": "PER",
        "title": "Personal Email",
        "emailType": "personal",
        "id": "123456"
    }
]

在我的 APIM 策略中,我想匹配传入的代码,例如“PER”并将相应的id结果存储在缓存中。 我尝试了以下策略的许多变体来提取单个值:

<set-variable name="emailId" 
value="@{var emailTypes = JArray.Parse(context.Variables["emailTypesList"].ToString());     
                    var emailId = emailTypes.FirstOrDefault(x => x["code"].Value<string>() == "PER");                
                    return emailId?["id"]?.ToString();
                    }"/>

但我无法正确获取语法,并收到“第 25 行第 18 列元素“set-variable”中的错误:表达式中不支持使用“System.Object”类型的成员“”。 谁能为我提供一种方法来做到这一点? 因为我使用的是 JArray(对象),所以可能还是不可能?

我读到策略中只有某些变量类型可用,但似乎可以在 C# 代码块中使用对象(或者这不正确)?

任何提示表示赞赏,提前致谢

json azure parsing azure-api-management apim
1个回答
0
投票

如果您想从 JSON 数组响应中获取

id
== "PER" 的
code
,请使用以下代码:

<set-variable name="emailId" value="@{
    var jsonArray = JArray.Parse(context.Response.Body.As<string>());
    var id = jsonArray.FirstOrDefault(x => x["code"].ToString() == "PER")?["id"].ToString();
    return id;
}" />
© www.soinside.com 2019 - 2024. All rights reserved.