Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
获取三个最新的时间json元素_Json_Linq_C# 4.0 - Fatal编程技术网

获取三个最新的时间json元素

获取三个最新的时间json元素,json,linq,c#-4.0,Json,Linq,C# 4.0,我有一个json数组。元素格式可能如下所示: { "CKey": "S2_123_45_20130416105655", "TimeOfCall": "2013-04-17T06:00:00-04:00", "DestinationNumber": "123456789", "CallType": "X", "CardNumber": "" } 数组中有很多元素,我只希望在24小时内通过TimeOfCall(DateTime格式)获得最新的三个订单。它们

我有一个json数组。元素格式可能如下所示:

{
    "CKey": "S2_123_45_20130416105655",
    "TimeOfCall": "2013-04-17T06:00:00-04:00",
    "DestinationNumber": "123456789",
    "CallType": "X",
    "CardNumber": ""
}
数组中有很多元素,我只希望在24小时内通过
TimeOfCall(DateTime格式)
获得最新的三个订单。它们可能是零或1,2。最大值为3。
我原以为用几个字典来存储和排序的价值,但它太复杂了

更新:

?jsonArray4
{[
   {
    "CKey": "P2_123_23_20130416105655",
    "TimeOfCall": "2013-04-17T06:00:00-04:00",
    "DestinationNumber": "1234567890",
    "CallType": "DEBIT",
    "CardNumber": ""
 },
 {
"CKey": "P5_123_105_20130412154035",
"TimeOfCall": "2013-04-17T07:00:00-04:00",
"DestinationNumber": "1234567890",
"CallType": "DEBIT",
"CardNumber": ""
},
{
  "CKey": "P5_123_114_20130412154000",
  "TimeOfCall": "2013-04-07T08:00:00-04:00",
  "DestinationNumber": "1234567890",
  "CallType": "DEBIT",
  "CardNumber": ""
}
]}
base {Newtonsoft.Json.Linq.JContainer}: {[
{
  "CKey": "P2_123_23_20130416105655",
  "TimeOfCall": "2013-04-17T06:00:00-04:00",
  "DestinationNumber": "1234567890",
  "CallType": "DEBIT",
  "CardNumber": ""
},
{
  "CKey": "P5_123_105_20130412154035",
  "TimeOfCall": "2013-04-17T07:00:00-04:00",
  "DestinationNumber": "1234567890",
  "CallType": "DEBIT",
  "CardNumber": ""
},
{
 "CKey": "P5_123_114_20130412154000",
 "TimeOfCall": "2013-04-07T08:00:00-04:00",
 "DestinationNumber": "1234567890",
 "CallType": "DEBIT",
 "CardNumber": ""
}
]}
 Type: Array
这个json数组是由C#代码从一个json字符串生成的:


我想试试这样的东西

jsonArray4.Where(item => Convert.ToDateTime(item["TimeOfCall"]).Date == DateTime.Now.Date)
.OrderByDescending(item => Convert.ToDateTime(item["TimeOfCall"]))
.Take(3);
更新:如果您需要最后24小时而不是当前一天,则:

jsonArray4.Where(item => Convert.ToDateTime(item["TimeOfCall"]) >= DateTime.Now.AddHours(-24))
.OrderByDescending(item => Convert.ToDateTime(item["TimeOfCall"]))
.Take(3);

更新2:我之前的建议应该有效。以下是我的完整代码示例:

string jsonText = @"[
{
    'CKey': 'P2_123_23_20130416105655',
    'TimeOfCall': '2013-04-17T06:00:00-04:00',
    'DestinationNumber': '1234567890',
    'CallType': 'DEBIT',
    'CardNumber': ''
},    
{
    'CKey': 'P5_123_105_20130412154035',
    'TimeOfCall': '2013-04-17T07:00:00-04:00',
    'DestinationNumber': '1234567890',
    'CallType': 'DEBIT',
    'CardNumber': ''
},
{
    'CKey': 'P5_123_114_20130412154000',
    'TimeOfCall': '2013-04-07T08:00:00-04:00',
    'DestinationNumber': '1234567890',
    'CallType': 'DEBIT',
    'CardNumber': ''
}    
]";

var result = JArray.Parse(jsonText).
    Where(item => Convert.ToDateTime(item["TimeOfCall"]).Date == new DateTime(2013, 4, 17))
    .OrderByDescending(item => Convert.ToDateTime(item["TimeOfCall"]))
    .Take(3);

请注意,我稍微更改了条件以实际返回某些内容。如果只需要最近24小时的结果,请将条件更改为>=DateTime.Now.AddHours(-24)

我会尝试以下操作

jsonArray4.Where(item => Convert.ToDateTime(item["TimeOfCall"]).Date == DateTime.Now.Date)
.OrderByDescending(item => Convert.ToDateTime(item["TimeOfCall"]))
.Take(3);
更新:如果您需要最后24小时而不是当前一天,则:

jsonArray4.Where(item => Convert.ToDateTime(item["TimeOfCall"]) >= DateTime.Now.AddHours(-24))
.OrderByDescending(item => Convert.ToDateTime(item["TimeOfCall"]))
.Take(3);

更新2:我之前的建议应该有效。以下是我的完整代码示例:

string jsonText = @"[
{
    'CKey': 'P2_123_23_20130416105655',
    'TimeOfCall': '2013-04-17T06:00:00-04:00',
    'DestinationNumber': '1234567890',
    'CallType': 'DEBIT',
    'CardNumber': ''
},    
{
    'CKey': 'P5_123_105_20130412154035',
    'TimeOfCall': '2013-04-17T07:00:00-04:00',
    'DestinationNumber': '1234567890',
    'CallType': 'DEBIT',
    'CardNumber': ''
},
{
    'CKey': 'P5_123_114_20130412154000',
    'TimeOfCall': '2013-04-07T08:00:00-04:00',
    'DestinationNumber': '1234567890',
    'CallType': 'DEBIT',
    'CardNumber': ''
}    
]";

var result = JArray.Parse(jsonText).
    Where(item => Convert.ToDateTime(item["TimeOfCall"]).Date == new DateTime(2013, 4, 17))
    .OrderByDescending(item => Convert.ToDateTime(item["TimeOfCall"]))
    .Take(3);


请注意,我稍微更改了条件以实际返回某些内容。如果只需要最近24小时的结果,请将条件更改为>=DateTime.Now.AddHours(-24)

多久执行一次?如果不经常出现,那么只需对数组进行排序并选择前3个。否则,请给我们提供更多关于数据结构的信息以及它们的使用方法。很少这样做,我不知道如何对整个对象进行排序。我应该创建字典吗?这是一个对象数组吗?还是JSON文档?您的数据结构是什么?请参阅我的更新,可能是我错误地将字符串转换为json数组。同时发布整个json文本(整个数组,而不仅仅是一个项目),您希望多久发布一次?如果不经常出现,那么只需对数组进行排序并选择前3个。否则,请给我们提供更多关于数据结构的信息以及它们的使用方法。很少这样做,我不知道如何对整个对象进行排序。我应该创建字典吗?这是一个对象数组吗?还是JSON文档?你的数据结构是什么?请看我的更新,也许我用错误的方法将字符串转换为json数组。同时发布整个json文本(整个数组,而不仅仅是一个项目)。老实说,我并不感到惊讶,我没有时间实际运行代码。不过,一旦有时间,我会的。谢谢,但我认为linq不能直接应用于json数组。可以,但是json.Net的linq实现有一些限制。一旦我不忙了,我会更深入地研究这个问题。最后,我有时间实际运行代码,它工作正常(除了由于打字错误导致的语法错误)。我建议您检查一下这个案例。您使用的是Json.Net的哪个版本?老实说,我并不感到惊讶,我没有时间实际运行代码。不过,一旦有时间,我会的。谢谢,但我认为linq不能直接应用于json数组。可以,但是json.Net的linq实现有一些限制。一旦我不忙了,我会更深入地研究这个问题。最后,我有时间实际运行代码,它工作正常(除了由于打字错误导致的语法错误)。我建议您回顾一下这个案例。您使用的是Json.Net的哪个版本?