在 MATLAB 中按值对 JSON 进行排序

问题描述

我想按 JSON 文件顺序按“createdAt”对我的值进行排序,并在绘图函数中使用这些值。如您所见,此列存储日期值,因此我已对其进行了转换。我已经应用了 sort 函数,但是当我看到数据的输出时,似乎 sort 不适用。

data = loadjson('C:/data/default.json');
count_data = sum(cellfun(@(x) numel(x),data.Location)); %returns 21

for i=1:count_data
   createdAt= cellfun( @(cellElem) cellElem.createdAt,data.Location,'UniformOutput',false);
   createdAtDate= datetime(createdAt(i),'InputFormat','dd-MM-yyyy HH:mm:ss','Format','dd-MM-yyyy n HH:mm:ss');
    [~,X] = sort(createdAtDate,'descend');
    out=data(X);
end

for i=1:count_data
  x = cellfun( @(cellElem) cellElem.createdAt,out.Location,false);
  disp(x);
 end

我的 JSON 文件

"Location": [
{
  "id": "0b5965e5-c509-4522-a525-8ef5a49dadaf","measureId": "5a6e9b79-dbb1-4482-acc1-d538f68ef01f","locationX": 0.9039769252518151,"locationY": 0.2640594070404616,"createdAt": "06-01-2021 19:38:44"
},{
  "id": "18714a2f-a8b3-4dc6-8a5b-114497fa9671","measureId": "671f52bc-a066-494a-9dce-6e9ccfac6c1d","locationX": 1.5592001730078755,"locationY": 0.5207689756815629,"createdAt": "06-01-2021 19:35:24"
},

提前致谢。

解决方法

需要提取所有需要的数据,然后排序

x = cellfun( @(cellElem) cellElem.locationX,data.Location );
y = cellfun( @(cellElem) cellElem.locationY,data.Location );
% Get date strings
d = cellfun( @(cellElem) cellElem.createdAt,data.Location,'UniformOutput',false)
% Convert to datetime
d = datetime( d,'InputFormat','dd-MM-yyyy HH:mm:ss' );
% Get the sort order
[~,idx] = sort( d );
% Sort other arrays
x = x(idx);
y = y(idx);

另一种选择是使用表格

x = cellfun( @(cellElem) cellElem.locationX,data.Location );
% Get dates
d = cellfun( @(cellElem) cellElem.createdAt,false)
d = datetime( d,'dd-MM-yyyy HH:mm:ss' );
% Create table
t = table( x(:),y(:),d(:),'VariableNames',{'locationX','locationY','createdAt'} );
% Sortrows
t = sortrows( t,'createdAt' );

您必须在此处使用表格而不是矩阵(尽管 sortrows 可以接受任何一种),因为跨列的数据类型是混合的。