Minecraft NBT データを JavaScript アプリケーション用の有効な JSON に変換する

NBT conversion

NBT データとその JSON への変換について理解する

Minecraft の NBT (Named Binary Tag) データは、非常に包括的な情報を保存し、エンティティやその他のものなどのゲーム オブジェクトを表すための豊富で複雑な形式です。ただし、Minecraft の外部でこの形式を使用することは、特に JavaScript を使用する Web ベースのアプリケーションに統合する場合には困難になる可能性があります。

典型的な問題の 1 つは、Minecraft から NBT データをエクスポートしようとするとき、特にそれを適切な JavaScript オブジェクトまたは JSON 形式に変換するときに発生します。 JSON は広く認められたデータ転送形式であるため、開発者は Web ベースのアプリケーションで NBT データを処理する必要が頻繁にあります。ただし、変換手順は簡単ではありません。

この記事では、NBT データ文字列を有効なネイティブ JavaScript オブジェクトまたは JSON に変換する方法と、2 つの形式の違いについて説明します。 JSON 解析を妨げるキー名のコロンや入れ子構造などの問題に対処するアプローチを見ていきます。

また、Chrome コンソールがこれらの複雑な文字列をうまく処理できる理由についても説明し、JavaScript で同等の結果を達成するための潜在的なソリューションを提供します。結論として、NBT データを適切に変換し、JavaScript およびオンライン アプリケーションとの相互運用性を確保するために必要なツールが手に入ります。

指示 使用例
.replace(/(\d+)b/g, '$1') この正規表現は、数字とその後に続く文字「b」を照合し、数字自体に置き換えることによって、Minecraft のバイト表記 (例: 「1b」、「2b」) を正当な数値に変換します。
.replace(/(\d*\.?\d+)f/g, '$1') このコマンドは、数字の後の「f」文字を削除することにより、NBT でエンコードされた浮動小数点値 (「1.0f」や「0.2f」など) を従来の JavaScript 数値に変換します。
.replace(/uuid:\[I;([\d,-]+)\]/g, ...) この RegEx パターンは、UUID の特殊な NBT 形式 (uuid:[I;] など) を認識し、それを有効な JSON 配列に変換します。括弧内のカンマ区切りの整数を収集し、それに応じて再フォーマットします。
JSON5.parse(data) このコマンドは、JSON5 パッケージを使用して緩和された JSON 構文を読み取るため、引用符で囲まれていないキーや一重引用符で囲まれた文字列など、通常の JSON 規則に厳密に従っていない NBT のようなデータ形式に役立ちます。
assert.isObject(result) この Chai ライブラリ コマンドは、単体テスト中に解析結果が有効な JSON オブジェクトであることを検証します。 NBT から JSON への変換の結果が正しい種類であるかどうかを判断します。
describe('NBT to JSON Conversion', ...) この Mocha テスト コマンドは、NBT から JSON への変換用に接続された多数のテスト ケースを含むブロックを含むテスト スイートを作成します。これは、変換関数の予想される動作を定義します。
replace(/:(?!\d)/g, ': "') この正規表現は、コロンで区切られたキー (「the_vault:card」など) に焦点を当てており、コロンの後の値が数値でない場合にのみ引用符を追加して、適切な JSON キーと値の形式を保証します。
.replace(/'([^']*)'/g, '"$1"') このコマンドは、文字列値またはキーを囲む一重引用符を二重引用符で置き換え、それらが JSON 形式で有効であることを保証します。 JSON は一重引用符をサポートしていないため、これが必要です。
it('should convert NBT string to JSON format', ...) この関数は、テスト スイート内の単一の単体テストを定義します。 NBT から JSON への変換が成功する特定のシナリオを提供し、それをアサーションで証明します。

NBT データの解析: スクリプトの詳細な内訳

提供される最初のスクリプトは、Minecraft NBT (Named Binary Tag) データを適切な JavaScript オブジェクトまたは JSON に変換することを目的としています。 NBT データの複雑さは、バイト、浮動小数点数、倍精度表現などの非標準の JSON のような形式が使用されていることに起因します。これらの懸念を克服するために、この関数では、「1b」を整数に変換したり、「1.0f」を浮動小数点に変換したりするなど、さまざまな正規表現が使用されています。通常の JSON は変換せずにこれらの形式をサポートできないため、これは重要です。これらの固有のパターンを解析して置き換えることにより、NBT データを JavaScript 互換の構造に変換できます。

このスクリプトは、NBT で「uuid:[I;...]」としてエンコードされる UUID もサポートしていますが、この形式はネイティブ JSON ではサポートされていません。正規表現は UUID パターンと一致し、それを有効な JSON 配列に変換します。もう 1 つの注目すべき機能は、「the_vault:card」などのコロンを含むキーを処理できることです。キーが引用符で囲まれていない限り、JSON ではコロンが問題になります。スクリプトはこれらの引用符を慎重に挿入し、変換後もデータが有効であることを保証します。このモジュール式アプローチにより、スクリプトが再利用可能になり、さまざまな NBT アーキテクチャに適応できるようになります。

2 番目のソリューションでは、JSON5 ライブラリを使用します。厳密な JSON とは異なり、JSON5 では一重引用符や引用符で囲まれていないキーなど、より柔軟な構文が可能です。これにより、データが必ずしも厳密に JSON に準拠しているわけではない NBT のような形式を扱うための理想的なツールになります。 JSON5 は、複雑な正規表現を必要とせずに、このタイプのデータを解析できます。これにより、コードの複雑さが最小限に抑えられ、大きな NBT データやネストされた NBT データを操作する際のエラー処理が容易になり、パフォーマンスが向上します。

どちらの例でも、コードはモジュール化されており、パフォーマンスが最適化されています。 NBT データの複雑さに応じて、各変換関数を個別に利用できます。さらに、単体テストではこれらの関数が正確であることが確認され、Mocha と Chai は解析された NBT テキストが有効な JSON オブジェクトに正常に変更されることを検証します。これにより、さまざまな状況でスクリプトが確実に実行されるため、開発者は自信を持ってこれらのソリューションをアプリケーションに統合できます。

JavaScript では、解析関数を使用して、NBT データを有効な JSON オブジェクトに変換します。

このソリューションは、カスタム JavaScript 解析メソッドを使用して Minecraft NBT データを処理します。

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
}

RegEx を使用して NBT データを変換し、JSON の主要な問題を置き換える

このソリューションは、RegEx を使用して NBT データを JSON 形式に変換する新しい方法を示します。

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 を使用して NBT のような形式を自動的に処理する

このアプローチでは、JSON5 パッケージを使用して、より汎用性の高い JSON のような形式を直接解析します。

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 から JSON への変換のテスト

この単体テスト スクリプトは、Mocha と Chai を使用して NBT から JSON への変換関数が期待どおりに実行されることを確認します。

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');
    });
});

JavaScript を使用した NBT データ変換の処理

Minecraft の NBT データを操作する際の重要な要素の 1 つは、JavaScript ベースのアプリケーションで使用するためにデータをエクスポートする複雑さです。 NBT データは JSON と同様に構造化されていますが、ネイティブ JSON と互換性のないバイト、浮動小数点数、倍精度浮動小数点数などの型が含まれています。 Minecraft 改造ユーティリティや分析ダッシュボードなどのツールを作成する開発者にとって、このデータを適切な JSON 形式に変換することは統合のために重要です。

NBT データの取得には、ネストされたオブジェクトと配列が含まれます。場合によっては、引用符で囲まれていないキー名やコロンを含む値など、奇妙な構文を使用します。 。従来の JSON パーサー (例: 、これらの非標準フォームを処理するのに苦労しています。データを前処理して JSON 標準と互換性のある形式に変換するには、カスタム解析スクリプトが必要です。

さらに、Chrome コンソールなどの最新の開発者ツールがそのようなデータをどのように簡単に管理できるかを評価することが重要です。 Chrome コンソールの柔軟性により、厳密ではない JavaScript オブジェクト表記を解釈し、大まかな形のデータでも壊れることなく解析できます。そのため、コンソールに NBT 文字列を貼り付けるだけで問題なく動作します。ただし、運用レベルのコードではより強力な検証が必要であり、このような状況では JSON5 などのライブラリが適切なソリューションとなる可能性があります。

  1. NBTデータとは何ですか?
  2. Minecraft は、NBT (名前付きバイナリ タグ) 形式を使用して、アイテム インベントリ、プレイヤー統計、世界情報などのデータ構造を保存します。
  3. どのようにして NBTデータを扱えますか?
  4. 残念ながら、 バイトや引用符で囲まれていないキーなどの非標準タイプが含まれているため、NBT データを直接受け入れることはできません。
  5. Chrome コンソールが NBT データを解析できるのはなぜですか?
  6. NBT データが Chrome で機能するのは、コンソールが緩やかな形式の JavaScript オブジェクトを処理し、非標準の JSON のような形式を柔軟な方法で読み取ることができるためです。
  7. JSON5 とは何ですか? JSON5 はどのように役立ちますか?
  8. は JSON を拡張するパッケージで、引用符で囲まれていないキーや末尾のカンマを含む非標準の JSON 形式を解析できるようにします。
  9. NBT データの解析で正規表現は何に使用されますか?
  10. 正規表現は、バイト型の変換(例: ) を適切な JSON 形式に変換します。

Minecraft の NBT データを有効な JSON に変換するには、NBT 形式に含まれる不一致に細心の注意を払う必要があります。バイト、浮動小数点、および UUID 形式を処理するには、カスタム解析スクリプトが必要です。これらがなければ、次のようなネイティブ JSON パーサーを使用します。 エラーが発生します。

次のような正規表現とフレームワークを使用する により、開発者は複雑な NBT データを効率的に管理できます。これらのソリューションは、JavaScript ベースのアプリやツールに簡単に統合できる、信頼性が高く再利用可能な機能を提供します。これらの方法論を理解することで、最新の開発環境で NBT データを正確に使用できるようになります。

  1. Minecraft NBT データを、NBT ドキュメントおよび Minecraft コマンドから派生した JSON および JavaScript オブジェクトに変換する方法についての情報。訪問: Minecraft NBT 形式
  2. Mozilla Developer Network (MDN) から参照された、データ操作に JavaScript 正規表現を使用する技術的な説明と例。訪問: MDN JavaScript 正規表現
  3. JSON5 に関する追加のガイダンス。柔軟な JSON に似た形式で、複雑な NBT データ構造を処理するために使用されます。情報源は JSON5 公式ドキュメントです。訪問: JSON5 ドキュメント