在c#中过滤JSON响应



我的Json数据是这样的…我想采取每月的年度战略由dueNum。所以我想说:dueNum值为x的数据的monthlyAnnualCostRate值是多少?

例如;用户给出信息:dueNum=46 | Ok,我将通过计算1.8800来计算monthlyAnnualCostRate

{
"dueNum": 45,
"installmentAmount": 28.89,
"monthlyInterestRate": 1,
"capitalAmount": 1000,
"totalInstallmentAmount": 1300.03,
"advancePaymentAmount": 0,
"expenseAmount": 100,
"annualCostRate": 22.7034,
"monthlyContractRate": 1,
"monthlyAnnualCostRate": 1.8920,
"interestAmount": 250.01,
"fundAmount": 37.52,
"taxAmount": 12.5
},
{
"dueNum": 46,
"installmentAmount": 28.42,
"monthlyInterestRate": 1,
"capitalAmount": 1000,
"totalInstallmentAmount": 1307.03,
"advancePaymentAmount": 0,
"expenseAmount": 100,
"annualCostRate": 22.5604,
"monthlyContractRate": 1,
"monthlyAnnualCostRate": 1.8800,
"interestAmount": 255.83,
"fundAmount": 38.39,
"taxAmount": 12.81
},
{
"dueNum": 47,
"installmentAmount": 27.96,
"monthlyInterestRate": 1,
"capitalAmount": 1000,
"totalInstallmentAmount": 1314.22,
"advancePaymentAmount": 0,
"expenseAmount": 100,
"annualCostRate": 22.4208,
"monthlyContractRate": 1,
"monthlyAnnualCostRate": 1.8684,
"interestAmount": 261.85,
"fundAmount": 39.27,
"taxAmount": 13.1
},

这是我的代码。我试过这个过程,但我犯了错误。错误:"Newtonsoft.Json。JsonReaderException: '从JsonReader读取JArray出错。'当前JsonReader项目不是一个数组:StartObject。路径1,行1,位置1">

我的代码:

string uri = "https://apis.garantibbva.com.tr:443/loans/v1/paymentPlan";
var client = new RestClient(uri);
var request = new RestRequest(Method.POST);
request.AddHeader("apikey", "l7xx8af86c14ea7e44e0ab3fbfcc6137ae09");
request.AddQueryParameter("loanType", "1");
request.AddQueryParameter("campaignCode", "BankSearch");
request.AddQueryParameter("loanAmount", "10000");
IRestResponse response = client.Execute(request);

var dueNum = 46;
double monthlyAnnualCostRate = JArray.Parse(response.Content)
.Where(p => (int)p["dueNum"]==dueNum)
.Select(p => (double)p["monthlyAnnualCostRate"])
.FirstOrDefault();
_logger.LogInformation("Garanti Bankası Response: {monthlyAnnualCostRate}", monthlyAnnualCostRate);
_logger.LogInformation("Garanti Bankası geçti");
JSON开始:

{
"data": {"list":    [
{
"dueNum": 3,
"installmentAmount": 341.37,
"monthlyInterestRate": 1,
"capitalAmount": 1000,
"totalInstallmentAmount": 1024.11,
"advancePaymentAmount": 0,
"expenseAmount": 100,
"annualCostRate": 118.9411,
"monthlyContractRate": 1,
"monthlyAnnualCostRate": 9.9118,
"interestAmount": 20.08,
"fundAmount": 3.02,
"taxAmount": 1.01
},
{
"dueNum": 4,
"installmentAmount": 257.54,
"monthlyInterestRate": 1,
"capitalAmount": 1000,
"totalInstallmentAmount": 1030.18,
"advancePaymentAmount": 0,
"expenseAmount": 100,
"annualCostRate": 92.9855,
"monthlyContractRate": 1,
"monthlyAnnualCostRate": 7.7488,
"interestAmount": 25.15,
"fundAmount": 3.77,
"taxAmount": 1.26
},

试试这个:

var dueNum = 46;
decimal monthlyAnnualCostRate = ((JArray) JObject.Parse(json)["data"]["list"])
.Where(p => (int)p["dueNum"] == dueNum)
.Select(p => (double)p["monthlyAnnualCostRate"])
.FirstOrDefault(); //1.88

您有一个JSON对象,其中包含一个data属性,其中包含一个list属性',其中包含数组。该数组不是根数组

所以你需要这个

double monthlyAnnualCostRate = JObject.Parse(json)["data"]["list"]
.Where(p => (int)p["dueNum"] == dueNum)
.Select(p => (double)p["monthlyAnnualCostRate"])
.FirstOrDefault();

创建一个合适的对象模型(使用Visual Studio的"Paste JSON as Classes"),然后直接反序列化将使事情变得容易得多。

最新更新