JSON-dan obyektləri necə bərpa etmək olar ki, meta məlumatlar saxlanılsın?
sobes.tech Süni İntellekt
AI-dan cavab
JSON-dan metadatalarla birlikdə obyektləri bərpa etmək üçün JSON.parse() metodundan və reviver funksiyasından istifadə etmək mümkündür. Reviver — JSON sintaksisinin təhlili prosesində hər bir açar-dəyər cütlüyü üçün çağırılan seçimli funksiyadır. Bu, deşifrə olunmuş dəyərləri geri qaytarılmadan əvvəl dəyişdirməyə imkan verir.
Tipin saxlanması üçün reviver istifadə nümunəsi:
const jsonString = '{"date": "2023-10-27T10:00:00.000Z", "regexp": "/test/i"}';
const restoredObject = JSON.parse(jsonString, (key, value) => {
if (typeof value === 'string' && /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z$/.test(value)) {
return new Date(value);
}
if (typeof value === 'string' && /^\/.+\/[gimyus]*$/.test(value)) {
try {
const match = value.match(/^\/(.+)\/([gimyus]*)$/);
if (match) {
return new RegExp(match[1], match[2]);
}
} catch (e) {
}
}
return value;
});
console.log(restoredObject.date instanceof Date); // true
console.log(restoredObject.regexp instanceof RegExp); // true
Daha mürəkkəb hallarda, metadatalar istifadəçi sinifləri və ya digər tiplər haqqında məlumatı ehtiva edə bilər, JSON-da açıq nişanlar və ya tip məlumatını təsvir edən sxema daxil etmək lazımdır.
Açıq nişanlar ilə nümunə:
{
"user": {
"_type": "User",
"name": "Alice",
"registrationDate": {
"_type": "Date",
"value": "2023-10-26T12:00:00.000Z"
}
},
"settings": {
"theme": "dark"
}
}
Və uyğun reviver:
class User {
constructor(name, registrationDate) {
this.name = name;
this.registrationDate = registrationDate;
}
}
const jsonWithMetadata = '{"user": {"_type": "User", "name": "Alice", "registrationDate": {"_type": "Date", "value": "2023-10-26T12:00:00.000Z"}}, "settings": {"theme": "dark"}}';
const restoredObjectWithMetadata = JSON.parse(jsonWithMetadata, (key, value) => {
if (value && typeof value === 'object' && value._type) {
switch (value._type) {
case 'Date':
return new Date(value.value);
case 'User':
return new User(value.name, new Date(value.registrationDate.value));
default:
return value;
}
}
return value;
});
console.log(restoredObjectWithMetadata.user instanceof User); // true
console.log(restoredObjectWithMetadata.user.registrationDate instanceof Date); // true
Bu yanaşma JSON-da metadataların quruluşu haqqında əvvəlcədən razılaşma və hər tip üçün bərpa loqikasını həyata keçirməyi tələb edir. Çətin obyektlərin, məsələn, istifadəçi siniflərinin metodları ilə birlikdə, daha mürəkkəb yanaşma və ya xüsusi kitabxanaların istifadəsini tələb edə bilər. Ancaq, standart tiplər və sadə məlumat strukturları üçün reviver kifayət qədər effektivdir.