Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从Json字符串中选择某个键_C#_Json_Json Deserialization - Fatal编程技术网

C# 如何从Json字符串中选择某个键

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

我试图得到accountBalance的值,但除此之外,我还得到了一些不需要的0。似乎我在每个没有accountBalance键的元素上都得到了0。如何仅选择包含关键accountBalance的元素

我的代码:

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"}