NBT duomenų supratimas ir jų konvertavimas į JSON
„Minecraft“ NBT (pavadinta dvejetainė žyma) duomenys yra turtingas ir sudėtingas formatas, skirtas itin išsamiai informacijai saugoti ir žaidimo objektams, pvz., objektams ir kitai, vaizduoti. Tačiau dirbti su šiuo formatu už „Minecraft“ ribų gali būti sunku, ypač integruojant jį į žiniatinklio programas, kurios naudoja „JavaScript“.
Viena tipiška problema iškyla bandant eksportuoti NBT duomenis iš „Minecraft“, ypač konvertuojant juos į tinkamą „JavaScript“ objektą arba JSON formatą. Kadangi JSON yra plačiai pripažintas duomenų perdavimo formatas, kūrėjams dažnai reikia tvarkyti NBT duomenis savo žiniatinklio programoms. nepaisant to, konvertavimo procedūra nėra paprasta.
Šiame straipsnyje paaiškinama, kaip konvertuoti NBT duomenų eilutes į galiojančius vietinius „JavaScript“ objektus arba JSON, taip pat paaiškinami šių dviejų formatų skirtumai. Išnagrinėsime būdus, kaip spręsti problemas, pvz., dvitaškius pagrindinių pavadinimuose ir įdėtąsias struktūras, kurios trukdo analizuoti JSON.
Taip pat išnagrinėsime, kodėl „Chrome“ konsolė gali taip gerai valdyti šias sudėtingas eilutes ir pasiūlyti galimus sprendimus, kaip pasiekti panašių „JavaScript“ rezultatų. Apibendrinant galima pasakyti, kad turėsite reikiamus įrankius, kad tinkamai konvertuotumėte NBT duomenis, užtikrinant suderinamumą su JavaScript ir internetinėmis programomis.
komandą | Naudojimo pavyzdys |
---|---|
.replace(/(\d+)b/g, '$1') | Ši reguliari išraiška „Minecraft“ baitų žymėjimą (pvz., „1b“, „2b“) paverčia teisėtais skaičiais, suderindama skaitmenis, po kurių rašoma raidė „b“ ir pakeičiant juos pačiais skaitmenimis. |
.replace(/(\d*\.?\d+)f/g, '$1') | Ši komanda paverčia slankiojo kablelio reikšmes, užkoduotas NBT (pvz., "1.0f" ir "0.2f") į įprastus "JavaScript" skaičius, pašalindama "f" simbolį po skaitmenų. |
.replace(/uuid:\[I;([\d,-]+)\]/g, ...) | Šis RegEx šablonas atpažįsta specialų UUID NBT formatą (pvz., uuid:[I;]) ir konvertuoja jį į tinkamą JSON masyvą. Jis renka kableliais atskirtus sveikuosius skaičius skliausteliuose ir atitinkamai juos suformatuoja. |
JSON5.parse(data) | Ši komanda naudoja JSON5 paketą, kad skaitytų sušvelnintą JSON sintaksę, todėl ji naudinga į NBT panašiems duomenų formatams, kurie tiksliai neatitinka įprastų JSON susitarimų, pvz., raktai be kabučių ir eilutės su kabutėmis. |
assert.isObject(result) | Ši „Chai“ bibliotekos komanda patikrina, ar išanalizuotas rezultatas yra galiojantis JSON objektas vieneto testavimo metu. Jis nustato, ar konvertavimo iš NBT į JSON rezultatas yra teisingas. |
describe('NBT to JSON Conversion', ...) | Ši Mocha testo komanda sukuria bandymų rinkinį, kuriame yra blokas, kuriame yra daug prijungtų bandomųjų atvejų, skirtų konvertuoti NBT į JSON. Jis apibrėžia numatomą konversijos funkcijos elgesį. |
replace(/:(?!\d)/g, ': "') | Šiame reguliariame reiškinyje dėmesys sutelkiamas į dvitaškiais atskirtus raktus (pvz., „the_vault:card“) ir kabutes prideda tik tada, kai reikšmė po dvitaškio nėra skaičius, taip užtikrinant tinkamą JSON rakto vertės formatavimą. |
.replace(/'([^']*)'/g, '"$1"') | Ši komanda pavienes kabutes aplink eilutės reikšmes arba raktus pakeičia dvigubomis kabutėmis, užtikrinant, kad jos galioja JSON formatu. Tai būtina, nes JSON nepalaiko pavienių kabučių. |
it('should convert NBT string to JSON format', ...) | Ši funkcija apibrėžia vieno vieneto testą bandymų rinkinyje. Jame pateikiamas konkretus scenarijus, pagal kurį NBT konvertavimas į JSON turėtų būti sėkmingas, ir įrodo tai tvirtinimais. |
NBT duomenų analizė: išsamus scenarijaus suskirstymas
Pirmasis siūlomas scenarijus skirtas konvertuoti Minecraft NBT (pavadintas dvejetainės žymos) duomenis į tinkamą JavaScript objektą arba JSON. NBT duomenų sudėtingumas kyla dėl to, kad juose naudojamos nestandartinės JSON formos, pvz., baitų, plūduriuojančių ir dvigubų atvaizdų. Kad išspręstų šias problemas, funkcija naudoja įvairias reguliarias išraiškas, įskaitant reikšmių, pvz., „1b“ vertimą į sveikuosius skaičius ir „1.0f“ į slankiuosius skaičius. Tai svarbu, nes įprastas JSON negali palaikyti šių formatų be konvertavimo. Išnagrinėdami ir pakeitę šiuos unikalius šablonus galime konvertuoti NBT duomenis į su JavaScript suderinamą struktūrą.
Scenarijus taip pat palaiko UUID, kurie NBT užkoduoti kaip „uuid:[I;...]“ – formato, kurio nepalaiko vietinis JSON. Reguliarioji išraiška atitinka UUID šabloną ir konvertuoja jį į galiojantį JSON masyvą. Kita svarbi savybė yra galimybė valdyti klavišus, kuriuose yra dvitaškių, pvz., „the_vault:card“. Dvitaškiai yra problemiški JSON, nebent raktas yra kabutėse. Scenarijus atsargiai įterpia šias citatas, užtikrindamas, kad duomenys išliktų galioti po transformacijos. Šis modulinis metodas leidžia scenarijų pakartotinai naudoti ir pritaikyti skirtingoms NBT architektūroms.
Antrasis sprendimas naudoja JSON5 biblioteką. Skirtingai nuo griežto JSON, JSON5 leidžia naudoti lankstesnę sintaksę, pvz., pavienes kabutes ir nekabutes raktus. Dėl to jis yra idealus įrankis dirbant su į NBT panašiais formatais, kurių duomenys nebūtinai yra suderinami su JSON. JSON5 gali išanalizuoti tokio tipo duomenis be sudėtingų reguliarių išraiškų. Tai sumažina kodo sudėtingumą, leidžia lengviau tvarkyti klaidas ir greičiau dirbti su dideliais arba įdėtais NBT duomenimis.
Abiejuose pavyzdžiuose kodas yra modulinis ir optimizuotas našumui. Kiekviena konvertavimo funkcija gali būti naudojama atskirai, atsižvelgiant į NBT duomenų sudėtingumą. Be to, vienetų testai patvirtina, kad šios funkcijos yra tikslios, o Mocha ir Chai patvirtina, kad išanalizuoti NBT tekstai sėkmingai pakeičiami į galiojančius JSON objektus. Tai užtikrina, kad scenarijai veiktų įvairiose situacijose, todėl kūrėjai gali užtikrintai integruoti šiuos sprendimus į savo programas.
„JavaScript“, naudodami analizavimo funkciją, konvertuokite NBT duomenis į galiojantį JSON objektą.
Šis sprendimas tvarko „Minecraft“ NBT duomenis naudodamas tinkintą „JavaScript“ analizavimo metodą.
function parseNBT(data) {
return data
.replace(/(\d+)b/g, '$1') // Convert byte (1b, 2b) to integers
.replace(/(\d*\.?\d+)f/g, '$1') // Convert float (1.0f, 0.2f) to numbers
.replace(/(\d*\.?\d+)d/g, '$1') // Convert double (1.0d, 0.5d) to numbers
.replace(/uuid:\[I;([\d,-]+)\]/g, (match, p1) => {
return `"uuid": [${p1}]`; // Convert "uuid:[I;...]" to valid JSON array
})
.replace(/:(?!\d)/g, ': "') // Add quotes to keys with colons
.replace(/(?!^)\w/g, '",') // Close quotes after values
}
NBT duomenų konvertavimas naudojant RegEx, kad būtų pakeistos pagrindinės problemos JSON
Šis sprendimas demonstruoja naują NBT duomenų konvertavimo į JSON formatą metodą naudojant RegEx.
function convertNBTtoJSON(data) {
return data
.replace(/(\d+)b/g, '$1') // Convert bytes to integers
.replace(/(\d*\.?\d+)f/g, '$1') // Convert floats to numbers
.replace(/(\d*\.?\d+)d/g, '$1') // Convert doubles to numbers
.replace(/'([^']*)'/g, '"$1"') // Replace single quotes with double quotes
.replace(/([a-zA-Z0-9_]+):/g, '"$1":') // Add quotes around keys
}
JSON5 naudojimas norint automatiškai tvarkyti į NBT panašius formatus
Šis metodas naudoja JSON5 paketą, kad būtų galima tiesiogiai analizuoti universalesnius JSON formatus.
const JSON5 = require('json5');
function parseWithJSON5(data) {
try {
return JSON5.parse(data); // JSON5 handles non-strict JSON formats
} catch (error) {
console.error("Error parsing NBT data:", error);
}
}
NBT konvertavimo į JSON testavimas naudojant vienetų testus
Šis vieneto testavimo scenarijus patvirtina, kad NBT į JSON konvertavimo funkcijos veikia taip, kaip tikėtasi naudojant Mocha ir Chai.
const assert = require('chai').assert;
describe('NBT to JSON Conversion', function() {
it('should convert NBT string to JSON format', function() {
const nbtData = 'some NBT data';
const result = parseNBT(nbtData);
assert.isObject(result, 'result is a valid JSON object');
});
});
NBT duomenų konvertavimo tvarkymas naudojant „JavaScript“.
Vienas iš svarbiausių darbo su „Minecraft“ NBT duomenų komponentų yra sudėtingas jų eksportavimas, kad būtų galima naudoti „JavaScript“ programose. NBT duomenų struktūra panaši į JSON, tačiau jie apima tipus, pvz., baitus, plūdes ir dvigubus duomenis, kurie nesuderinami su vietiniu JSON. Kūrėjams, kuriantiems įrankius, pvz., „Minecraft“ modifikavimo priemones ar analizės prietaisų skydelius, integruojant labai svarbu išversti šiuos duomenis į tinkamą JSON formatą.
NBT duomenų gavimas apima įdėtus objektus ir masyvus, kartais su nelygine sintaksė, pvz., raktų pavadinimai be kabučių arba reikšmės su dvitaškiais, pvz. "the_vault:card". Tradiciniai JSON analizatoriai, pvz JSON.parse(), sunku tvarkyti šias nestandartines formas. Norint iš anksto apdoroti duomenis ir paversti juos formatu, suderinamu su JSON standartais, reikalingi pasirinktiniai analizavimo scenarijai.
Be to, svarbu įvertinti, kaip šiuolaikiniai kūrėjo įrankiai, pvz., „Chrome“ konsolė, gali lengvai valdyti tokius duomenis. „Chrome“ konsolės lankstumas leidžia interpretuoti negriežtą „JavaScript“ objektų žymėjimą, analizuojant net laisvai suformuotus duomenis nesulaužant, todėl tiesiog NBT eilutės įklijavimas į konsolę veikia nepriekaištingai. Tačiau gamybos lygio kode reikalingas stipresnis patvirtinimas, o bibliotekos, pvz., JSON5, gali būti tinkamas sprendimas tokiomis aplinkybėmis.
NBT konvertavimas į JSON: dažnai užduodami klausimai
- Kas yra NBT duomenys?
- „Minecraft“ naudoja NBT (pavadintą dvejetainę žymą) formatą duomenų struktūroms, tokioms kaip prekių atsargos, žaidėjų statistika ir pasaulio informacija, saugoti.
- Kaip veikia JSON.parse() tvarkyti NBT duomenis?
- Deja, JSON.parse() negali tiesiogiai priimti NBT duomenų, nes yra nestandartinių tipų, pvz., baitų ir nekabutuotų raktų.
- Kodėl „Chrome“ konsolė gali išanalizuoti NBT duomenis?
- NBT duomenys veikia „Chrome“, nes konsolė gali tvarkyti laisvai suformuotus „JavaScript“ objektus ir lanksčiai skaityti nestandartinius JSON formatus.
- Kas yra JSON5 ir kaip tai padeda?
- JSON5 yra JSON išplečiantis paketas, leidžiantis analizuoti nestandartinius JSON formatus, įskaitant raktus be kabučių ir kablelius.
- Kam naudojamos reguliarios išraiškos analizuojant NBT duomenis?
- Reguliarios išraiškos naudojamos tam tikriems NBT duomenų šablonams suderinti ir pakeisti, pvz., transformuoti baitų tipus (pvz., "1b") į atitinkamus JSON formatus.
Paskutinės mintys apie NBT konvertavimą į JSON
Konvertuojant Minecraft NBT duomenis į galiojantį JSON, reikia atidžiai stebėti NBT formato neatitikimus. Pasirinktiniai analizavimo scenarijai reikalingi baitų, plūduriuojančių ir UUID formatų tvarkymui. Be jų, naudojant vietinius JSON analizatorius, pvz JSON.parse sukeltų klaidų.
Naudojant reguliariąsias išraiškas ir sistemas, pvz JSON5, kūrėjai gali efektyviai valdyti sudėtingus NBT duomenis. Šie sprendimai siūlo patikimas, daugkartinio naudojimo funkcijas, kurias galima lengvai integruoti į „JavaScript“ programas ar įrankius. Šių metodikų supratimas leidžia tiksliai naudoti NBT duomenis šiuolaikinėse kūrimo aplinkose.
Šaltiniai ir nuorodos
- Informacija apie „Minecraft“ NBT duomenų konvertavimą į JSON ir „JavaScript“ objektus, gautus iš NBT dokumentacijos ir „Minecraft“ komandų. Apsilankykite: Minecraft NBT formatas .
- Techninis paaiškinimas ir „JavaScript“ reguliariųjų išraiškų naudojimo duomenų apdorojimui pavyzdžiai, nurodyti iš „Mozilla Developer Network“ (MDN). Apsilankykite: MDN JavaScript reguliarios išraiškos .
- Papildomos gairės dėl JSON5, lankstaus į JSON panašaus formato, naudojamo sudėtingoms NBT duomenų struktūroms tvarkyti, gautos iš oficialių JSON5 dokumentų. Apsilankykite: JSON5 dokumentacija .