C# 如何从Json字符串中选择某个键
我试图得到accountBalance的值,但除此之外,我还得到了一些不需要的0。似乎我在每个没有accountBalance键的元素上都得到了0。如何仅选择包含关键accountBalance的元素 我的代码:C# 如何从Json字符串中选择某个键,c#,json,json-deserialization,C#,Json,Json Deserialization,我试图得到accountBalance的值,但除此之外,我还得到了一些不需要的0。似乎我在每个没有accountBalance键的元素上都得到了0。如何仅选择包含关键accountBalance的元素 我的代码: var resultOpTrades = JsonConvert.DeserializeObject<RootObject>(result);//Deserialize Json var pricelist = resultOpTrades.transactions.Sel
var resultOpTrades = JsonConvert.DeserializeObject<RootObject>(result);//Deserialize Json
var pricelist = resultOpTrades.transactions.Select(p => p.accountBalance).ToList().Select(s => Convert.ToDouble(s)).ToList();
pricelist.ForEach(Console.WriteLine);
我得到的结果是:
0,
2000,
0,
2000,
0,您可以使用它将JSON解析为,然后迭代事务属性并获取accountBalance值
var json=JObject.Parseresult;
json[transactions]中的foreach变量项
{
如果项目[accountBalance]!=null
{
Console.WriteLineitem[accountBalance]。值;
}
}
使用Linq中的Where筛选值为零的价目表 var resultOpTrades=JsonConvert.DeserializeObjectresult//反序列化Json var pricelist=resultOpTrades.transactions.Wherex=>x.accountBalance!=0.选择p=>Convert.ToDoublep.accountBalance.ToList; pricelist.ForEachConsole.WriteLine;
你好@Diana M00nshine 据我所知,您只希望获取设置了accountBalance字段的事务 首先,我建议您创建这个类来反映json数组字段transactions的模式 类事务 { 公共字符串accountBalance{get;set;} 公共字符串类型{get;set;} 公共字符串marginRate{get;set;} 公共字符串别名{get;set;} 公共字符串id{get;set;} public int userID{get;set;} 公共字符串accountID{get;set;} 公共字符串batchID{get;set;} 公共字符串requestID{get;set;} 公共字符串时间{get;set;} } 要获取JSON字符串中定义了accountBalance属性的所有事务,可以执行如下操作: 解析json字符串 获取事务令牌并将其强制转换为IEnumerable 然后,对于transactions令牌中的每个项目,将它们转换为我在上面的源代码中包含的类Transaction的对象。 强制转换到事务对象列表 var json=JObject.ParsejsonString; 列出TransactionWithAccountBalance=json[transactions].AsJEnumerable .其中t=>t[账户余额]!=无效的 .Selectt=>t.ToObject 托利斯特先生; 如果您只想要在json中不仅设置了key accountBalance而且不同于null或empty的事务,那么可以如下更新where条件 .其中t=>t[账户余额]!=null&&string.IsNullOrEmptyt[accountBalance].Value 然后,如果您想要一个包含所有交易账户余额的列表,您可以执行以下操作: var priceList=交易与账户余额。选择t=>t.accountBalance.ToList; 我加入了这个小测试类,让您可以轻松地尝试我的解决方案。您可以看到列表中的将仅显示json文件集中具有感兴趣的键的事务 班级计划 { 静态环[]args { 字符串jsonString=@{ 交易:[ { 类型:客户端配置, 保证金率:0.02, 别名:Test USD, id:2, 用户ID:4455670, 账号:101-004-4455670-004, batchID:1, 请求ID:1789786643428780285, 时间:2018-01-22T13:01:57.930423995Z }, { 账户余额:2000.0000, 类型:转账资金, 金额:2000.0000000000, 资助理由:调整, id:3, 用户ID:4455670, 账号:101-004-4455670-004, batchID:3, 请求ID:1735743448013647784, 时间:2018-01-22T13:02:24.580177329Z }, { 类型:市场订单, 文书:欧元/日元, 单位:-2000, 时间信息:霍, positionFill:默认值, 原因:客户订单, id:4, 用户ID:4455670, 账号:101-004-4455670-004, batchID:4, 请求ID:604043875889188847, 时间:2018-01-22T13:06:12.13811604Z }, { 类型:订单填写, 订单号:4, 文书:欧元/日元, 单位:-2000, 价格:135.627, 损益:0.0000, 融资额:0.0000, 佣金:0.0000, 账户余额:2000.0000, GainQuoteHome转换系数:0.009022013713, LossQuoteHome换算系数:0.009023071995, 担保执行费:0.0000, 一半成本:0.1353, fullVWAP:135.627, 原因:市场秩序, 贸易公开:{ 价格:135.627, tradeID:5, 单位:-2000, 担保执行费:0.0000, 成本:0.1353 }, 全价:{ 收尾价:135.627, 收尾任务:135.642, 时间戳:2018-01-22T13:05:56.780436649Z, 投标:[ { 价格:135.627, 流动资金:10000000 } ], 询问:[ { 价格:135.642, 流动资金:10000000 } ] }, id:5, 用户ID:4455670, 账号:101-004-4455670-004, batchID:4, 请求ID:604043875889188847, 时间:2018-01-22T13:06:12.13811604Z }, { 类型:市场订单, 文书:欧元/日元, 单位:2000, 时间信息:霍, 位置填充:仅减少_, 原因:交易结束, 贸易结算:{ 单位:全部, tradeID:5 }, id:6, 用户ID:4455670, 账号:101-004-4455670-004, batchID:6, 请求ID:604043878252078, 时间:2018-01-22T13:07:10.544407912Z } ], lastTransactionID:22083 }; var json=JObject.ParsejsonString; 列出TransactionWithAccountBalance=json[transactions].AsJEnumerable .其中t=>t[账户余额]!=无效的 .Selectt=>t.ToObject 托利斯特先生; var priceList=交易与账户余额。选择t=>t.accountBalance.ToList; Console.ReadKey; } } 不要忘记添加这些名称空间以编译程序类: 使用Newtonsoft.Json.Linq; 使用制度; 使用System.Collections.Generic; 使用System.Linq;
您的RootObject看起来像什么?JSON似乎包含一个RootObject列表,但如果它为null[JsonPropertyNullValueHandling=NullValueHandling.Ignore],则会忽略一些属性。这就是JSON项中缺少某些属性的原因。因此,在使用它之前,您可以检查它是否为null或零。谢谢。我用了Pavel Anikhouskisolution@DianaM00nshine欢迎,如果答案解决了您的问题,您可以批准该答案:
{"transactions": [
{
"type": "CLIENT_CONFIGURE",
"marginRate": "0.02",
"alias": "Test USD",
"id": "2",
"userID": 4455670,
"accountID": "101-004-4455670-004",
"batchID": "1",
"requestID": "1789786643428780285",
"time": "2018-01-22T13:01:57.930423995Z"
},
{
"accountBalance": "2000.0000",
"type": "TRANSFER_FUNDS",
"amount": "2000.0000000000",
"fundingReason": "ADJUSTMENT",
"id": "3",
"userID": 4455670,
"accountID": "101-004-4455670-004",
"batchID": "3",
"requestID": "1735743448013647784",
"time": "2018-01-22T13:02:24.580177329Z"
},
{
"type": "MARKET_ORDER",
"instrument": "EUR_JPY",
"units": "-2000",
"timeInForce": "FOK",
"positionFill": "DEFAULT",
"reason": "CLIENT_ORDER",
"id": "4",
"userID": 4455670,
"accountID": "101-004-4455670-004",
"batchID": "4",
"requestID": "60404387589188847",
"time": "2018-01-22T13:06:12.138121604Z"
},
{
"type": "ORDER_FILL",
"orderID": "4",
"instrument": "EUR_JPY",
"units": "-2000",
"price": "135.627",
"pl": "0.0000",
"financing": "0.0000",
"commission": "0.0000",
"accountBalance": "2000.0000",
"gainQuoteHomeConversionFactor": "0.009022013713",
"lossQuoteHomeConversionFactor": "0.009023071995",
"guaranteedExecutionFee": "0.0000",
"halfSpreadCost": "0.1353",
"fullVWAP": "135.627",
"reason": "MARKET_ORDER",
"tradeOpened": {
"price": "135.627",
"tradeID": "5",
"units": "-2000",
"guaranteedExecutionFee": "0.0000",
"halfSpreadCost": "0.1353"
},
"fullPrice": {
"closeoutBid": "135.627",
"closeoutAsk": "135.642",
"timestamp": "2018-01-22T13:05:56.780436649Z",
"bids": [
{
"price": "135.627",
"liquidity": "10000000"
}
],
"asks": [
{
"price": "135.642",
"liquidity": "10000000"
}
]
},
"id": "5",
"userID": 4455670,
"accountID": "101-004-4455670-004",
"batchID": "4",
"requestID": "60404387589188847",
"time": "2018-01-22T13:06:12.138121604Z"
},
{
"type": "MARKET_ORDER",
"instrument": "EUR_JPY",
"units": "2000",
"timeInForce": "FOK",
"positionFill": "REDUCE_ONLY",
"reason": "TRADE_CLOSE",
"tradeClose": {
"units": "ALL",
"tradeID": "5"
},
"id": "6",
"userID": 4455670,
"accountID": "101-004-4455670-004",
"batchID": "6",
"requestID": "60404387832520278",
"time": "2018-01-22T13:07:10.544407912Z"
},],"lastTransactionID": "22083"}