问题描述
some: {
"success": true,"data":
[
{
"15-10-2020": [
{
"id": 100,"details": {
"_id": 1,"_title": "My Title"
},"created_at": "2020-10-15"
},{
"snf_id": 101,{
"snf_id": 102,"created_at": "2020-10-15"
}
],"30-09-2020": [
{
"snf_id": 301,"details": {
"_id": 8,"created_at": "2020-09-30"
}
]
}
],"message": "Successfully Retrieved"
}
struct Response : Codable {
var success : Bool?
**var data : [[String:[Data]]]?**
var message : String?
}
struct Data: Codable {
var snf_id: Int?
var details: Details?
var created_at: String?
}
// MARK: - Details
struct Details: Codable {
var _id: Int?
var _title: String?
}
当我打印并使用来检查json数据时
let dataValue = String(data:data,encoding: .utf8)
print(dataValue)
// This is fine
在将数据解码到我的结构后,
let Response = try JSONDecoder().decode(Response.self,from: data)
print(Response)
数据顺序有误,这里做错了什么,如何纠正?
解决方法
可能是按顺序存储它们的唯一选择:
const toBeSorted = {some: {success: true,data:[{"15-10-2020": [{"id": 100,"details": {"_id": 1,"_title": "My Title"},"created_at": "2020-10-15"},{"snf_id": 101,{"snf_id": 102,"created_at": "2020-10-15"}],"30-09-2020": [{"snf_id": 301,"details": {"_id": 8,"created_at": "2020-09-30"}]
}],"message": "Successfully Retrieved"}};
const arr = [];
const obj = toBeSorted.some.data[0];
for (const i in obj) { // split your big [{date:{},date:{},...}] to multiple objects [{date:{}},{date:{}},...]
const subObj = {};
subObj[i] = obj[i];
arr.push(subObj);
}
arr.sort(byDateKey);
toBeSorted.some.data = arr;
document.body.innerHTML = '<PRE>' + JSON.stringify(toBeSorted,null,2)
.replace(/([{[\]}])[\s\n]+([{[\]}])/g,'$1$2')
.replace(/(\},)[\s\n]+(\{)/g,'$1$2') + '</PRE>'
function byDateKey (a,b) {
a = Object.keys(a)[0].split('-');
b = Object.keys(b)[0].split('-');
for (let i = a.length; i--;) {
if (a[i] !== b[i]) return parseInt(a[i]) - parseInt(b[i]);
}
return 0;
}
v2数组
const toBeSorted = {some: {success: true,...]
arr.push([i,obj[i]]);
}
arr.sort(byDateKey);
toBeSorted.some.data = arr;
document.body.innerHTML = '<PRE>' + JSON.stringify(toBeSorted,b) {
a = a[0].split('-');
b = b[0].split('-');
for (let i = a.length; i--;) {
if (a[i] !== b[i]) return parseInt(a[i]) - parseInt(b[i]);
}
return 0;
}
或v3键似乎按插入顺序@end;-)
const toBeSorted = {some: {success: true,"message": "Successfully Retrieved"}};
const obj = toBeSorted.some.data[0];
var k = Object.keys(obj).sort(byDate);
var obj2 = {};
for (const i of k) { // split your big [{date:{},...]
obj2[i] = obj[i];
}
toBeSorted.some.data[0] = obj2;
function byDate (a,b) {
a = a.split('-');
b = b.split('-');
for (let i = a.length; i--;) {
if (a[i] !== b[i]) return parseInt(a[i]) - parseInt(b[i]);
}
return 0;
}
document.body.innerHTML = '<PRE>' + JSON.stringify(toBeSorted,'$1$2') + '</PRE>'