Jデータ

JData仕様
Jデータ
ファイル名拡張子
.jdt、.jdb [1]
インターネットメディアの種類
アプリケーション/jdata-text、アプリケーション/jdata-binary [1]
タイプコードテキストとバイナリ
開発者キアンキアン・ファング
初回リリース2019年7月25日; 6年前[1] (2019-07-25)
最新リリース
1.0 ドラフト2
2019年7月25日; 6年前[2] (2019-07-25)
フォーマットの種類データ交換
延長JSON
オープンフォーマット?はい
Webサイトopenjdata.org

JData は、人間が読める (テキストベース) JSONおよび (バイナリ) UBJSON形式を使用して汎用および科学的なデータ構造を表すために設計された、軽量のデータ注釈および交換オープン スタンダードです。JData 仕様は、特にMATLABPythonJavaScriptなどのプログラミング言語間での階層的で複雑なデータの交換を簡素化することを目的としています。JData は、スカラー、N 次元配列、スパース/複素数値配列、マップ、テーブル、ハッシュ、リンク リスト、ツリー、グラフなど、さまざまなデータ構造を格納するための JSON 互換"name":value構造の包括的なリストを定義し、各データ要素のオプションのデータ グループ化およびメタデータをサポートします。生成されたデータ ファイルは JSON/UBJSON 仕様と互換性があり、ほとんどの既存のパーサーで簡単に処理できます。JData で定義された注釈キーワードにより、JSON での厳密に型指定されたバイナリ データ ストリームの格納、データ圧縮、リンク、および参照も可能になります。

歴史

JData アノテーションスキームの初期開発は、広く利用されているオープンソースの MATLAB/ GNU Octave_ArrayType_ JSON リーダー/ライターである JSONLab Toolbox の開発の一環として、2011 年に開始されました。 、、_ArraySize_などのアノテーション付き ND 配列構造の大部分は、_ArrayData_JSONLab の初期リリースで実装されていました。2015 年には、JData 仕様の最初のドラフトが Iso2Mesh Wiki で開発され、2019 年以降、仕様のその後の開発は Github に移行されています。

リリース

JData バージョン 0.5

JData仕様のv0.5バージョンは、2019年5月15日に公開された、仕様の最初の完全なドラフトおよび公開RFC(Request for Comment)です。このプレビュー版仕様は、ND配列、スパース配列および複素数値配列、バイナリデータインターフェース、データレコードレベルの圧縮、ハッシュ、テーブル、ツリー、リンクリスト、グラフなど、科学データおよび研究に関連するデータ構造の大部分をサポートしています。また、データのリンクと参照に関する一般的なアプローチについても説明しています。この仕様バージョンのリファレンス実装は、JSONLab v1.8としてリリースされています。

JData バージョン 1 ドラフト 1

JData仕様バージョン1のドラフト1は2019年6月4日にリリースされました。このリリースの主な変更点は次のとおりです。

  1. ND配列要素のシリアル化順序が列優先から行優先に変わります。
  2. _ArrayData_複素N次元配列の構築は1次元ベクトルから2行行列に変更されます。
  3. ハッシュデータのJSON表現で文字列以外の値を持つキーをサポートし、
  4. _ByteStream_汎用バイナリ データまたはバイナリ ラージ オブジェクト (BLOB) をシリアル化するために新しいオブジェクトを追加します。

この仕様バージョンのリファレンス実装は、JSONLab v1.9 としてリリースされています。

JData バージョン 1 ドラフト 2

JData仕様バージョン1のドラフト2は2019年7月25日にリリースされました。このリリースの主な変更点は次のとおりです。

  1. タグを介して特殊な行列の保存をサポートする_ArrayShape_
  2. すべての_ArrayCompression*_タグの名前を に変更しました_ArrayZip*_
  3. 専用のテーブル データ キーワードを追加します: _TableCols_、、_TableRows_および_TableRecords_

この仕様バージョンのリファレンス実装は、JSONLab v2.0 としてリリースされています。

JDataアノテーションの例

数値スカラー

数値はJSONまたはUBJSON仕様で直接サポートされています。数値は通常、JDataアノテーションに変換されても変更されません。ファイルに保存する場合は、JSON/UBJSON数値形式で直接保存されます。例えば、

ネイティブデータ テキスト-JData/JSON形式 バイナリJData(BJData/ UBJSON )
a=3.14159 ➡️ {"a":3.14159} [{] [U][1][a][D][3.15169] [}]

特殊定数と文字列

いくつかの特別な定数、つまり「NaN」、「Infinity」、「-Infinity」があります。これらは、JSON/テキストJData形式で保存されるときに特別な文字列キーワードとしてエンコードされますが、バイナリJData形式で保存されるときは変更されません。

ネイティブデータ テキスト-JData/JSON形式 バイナリJData(BJData/ UBJSON )
a=nan ➡️ {"a":"_NaN_"} [{] [U][1][a][D][nan] [}]
a=inf ➡️ {"a":"_Inf_"} [{] [U][1][a][D][inf] [}]
a=-inf ➡️ {"a":"-_Inf_"} [{] [U][1][D][-inf] [}]
a=true ➡️ {"a":true} [{] [U][1][a][T] [}]
a=false ➡️ {"a":false} [{] [U][1][a][F] [}]
a=null ➡️ {"a":null} [{] [U][1][a][Z] [}]
a="A string" ➡️ {"a":"A string"} [{] [U][1][a][S][U][8][A string] [}]

構造体とハッシュ

メタデータや名前付きメンバーを持つ単純なリストを表現する場合、階層構造が必要になることがよくあります。「structure」データ型はJSONおよびUBJSONの「object」構造に直接マッピングできるため、JDataアノテーションを使用する際に変換する必要はありません。

ネイティブデータ テキスト-JData/JSON形式 バイナリJData(BJData/ UBJSON )
a =構造体( 
'i1' , 1 , 'f1' , 2.0 , 's1' : "文字列" )  
  
  

➡️
{ 
"a" :{ "i1" : 1 , "f1" : 2.0 , "s1" : "文字列" } }  
  
  
  
 

[{]
[U][1][a]
[{]
[U][2][i1][U][1]
[U][2][f1][D][2.0]
[U][2][s1][S][6][文字列]
[}]
[}]

配列形式の2次元配列

単純な1次元ベクトルは、JSONとUBJSONの両方で「配列」構造を使用してサポートされています。例えば、

ネイティブデータ ➡️ テキスト-JData/JSON形式 バイナリJData(BJData/ UBJSON )
a =[ 
1 , 2 , 3 4 , 5 , 6 ]  
  

{ 
"a" :[ [ 1 , 2 , 3 ], [ 4 , 5 , 6 ] ] } 
  
  
 

[{]
[U][1][a]
[[]
[[] [U][1][U][2][U][3] []]
[[] [U][4][U][5][U][6] []]
[]]
[}]
上記の1次元行ベクトルの例と同様に、型[$]とカウント[#]マーカーを使用してこの配列をバイナリ形式で簡略化することができます。
[{]
[U][1][a]
[[]
[[] [$][U] [#][U][3] [1][2][3]
[[] [$][U] [#][U][3] [4][5][6]
[]]
[}]
これをさらに簡素化するために、JData仕様では、UBJSON配列カウントマーカーを拡張し[#]、ND配列の次元ベクトルを表す1次元配列カウント型(この場合は[2,3]2×3行列) を受け入れるようにしました。
[{]
[U][1][a]
[[] [$][U] [#][[] [$][U][#][2] [2][3]
[1][2][3][4][5][6]
[}]

注釈付き形式の2次元配列

JData仕様では、軽量なデータアノテーション手法を導入しました。これにより、保存されたデータレコードにデータ型、データサイズ、圧縮率などの追加情報を指定できるようになりました。これは、「構造体のような」データコンテナ(構造体はほぼすべてのプログラミング言語でサポートされています)と、JData特有の人間が読めるサブフィールドキーワードを使用することで実現されています。この構造は、既存の多くのJSON/UBJSONライブラリを使用して簡単にシリアル化できます。

例えば、上記の2次元配列は、細分化されたデータ保存を可能にするために、注釈付き形式を使用して保存することもできる。

ネイティブデータ テキスト-JData/JSON形式 バイナリJData(BJData/ UBJSON )
a =[ 
1 , 2 , 3 4 , 5 , 6 ]  
  

➡️
{ 
"a" :{ "_ArrayType_" : "uint8" , "_ArraySize_" :[ 2 , 3 ], "_ArrayData_" :[ 1 , 2 , 3 , 4 , 5 , 6 ] } } 
  
  
  
 

[{]
[U][1][a]
[{]
[U][11][_ArrayType_] [S][U][5][uint8]
[U][11][_配列サイズ_] [[] [U][2][U][3] []]
[U][11][_ArrayData_] [[] [$][U][#][6] [1][2][3][4][5][6]
[}]
[}]

3次元以上の高次元配列

高次元配列の保存には、JSON/UBJSON の両方でネイティブにサポートされている直接形式または注釈形式のいずれかを使用できますが、テキストベースの JData には注釈形式を使用し、バイナリ JData にはパック配列に最適化された形式を使用する方が、処理速度が速いため、より有利になります。

ネイティブデータ ➡️ テキスト-JData/JSON形式 バイナリJData(BJData/ UBJSON )
a = 
[ 
[ [ 1 , 9 , 6 , 0 ], [ 2 , 9 , 3 , 1 ], [ 8 , 0 , 9 , 6 ] ], [ [ 6 , 4 , 2 , 7 ], [ 8 , 5 , 1 , 2 ], [ 3 , 3 , 2 , 6 ] ] ] 
  
  
  
 
 
  
  
  
 

{ 
"a" :[ [ [ 1 , 9 , 6 , 0 ], [ 2 , 9 , 3 , 1 ], [ 8 , 0 , 9 , 6 ] ], [ [ 6 , 4 , 2 , 7 ], [ 8 , 5 , 1 , 2 ], [ 3 , 3 , 2 , 6 ] ] ] }  
        
          
          
          
        
        
          
          
          
        
    

[{]
  [U][1][a]
  [[]
    [[]
      [[] [U][1][U][9][U][6][u][0] []]
      [[] [U][2][U][9][U][3][u][1] []]
      [[] [U][8][U][0][U][9][u][6] []]
    []]
    [[]
      [[] [U][6][U][4][U][2][u][7] []]
      [[] [U][8][U][5][U][1][u][2] []]
      [[] [U][3][U][3][U][2][u][6] []]
    []]
  []]
[}]
JData アノテーションを使用したより効率的な代替フォーマット
{ 
"a" :{ "_ArrayType_" : "uint8" , "_ArraySize_" :[ 2 , 3 , 4 ], "_ArrayData_" :[ 1 , 9 , 6 , 0 , 2 , 9 , 3 , 1 , 8 , 0 , 9 , 6 , 6 , 4 , 2 , 7 , 8 , 5 , 1 , 2 , 3 , 3 , 2 , 6 ] } }  
        
        
        
  

[{]
  [U][1][a]
  [[] [$][U] [#][[] [$][U][#][3] [2][3][4]
     [1][9][6][0][2][9][3][1][8][0][9][6][6][4][2]
     [7][8][5][1][2][3][3][2][6]
[}]

圧縮された配列データ

JDataアノテーションは、スペースを節約するためにデータ圧縮をサポートしています。いくつかの追加キーワードが必要です。具体的には、_ArrayZipType使用する圧縮方法、圧縮前に_ArrayZipSize_コンストラクトに格納される「前処理済み」データの次元ベクトル_ArrayData__ArrayZipData_圧縮されたデータのバイトストリームなどです。例えば、

ネイティブデータ ➡️ テキスト-JData/JSON形式 バイナリJData(BJData/ UBJSON )
a =[ 
1 , 2 , 3 4 , 5 , 6 ]  
  

{ 
"a" :{ "_ArrayType_" : "uint8" , "_ArraySize_" :[ 2 , 3 ], "_ArrayZipType_" : "zlib" "_ArrayZipSize_" :[ 1 , 6 ], "_ArrayZipData_" : "eXXSjZGJmYWUDAAA+ABY=" } } 
  
  
  
  
  
 

[{]
[U][1][a]
[{]
[U][11][_ArrayType_] [S][U][5][uint8]
[U][11][_配列サイズ_] [[] [U][2][U][3] []]
[U][14][_ArrayZipType_] [S][U][4][zlib]
[U][14][_ArrayZipSize_] [[] [U][1][U][6] []]
[U][14][_ArrayZipData_] [[] [$][U][#][14] [...圧縮されたバイトストリーム...]
[}]
[}]

複素数と複素数値配列

複素数値データレコードは「注釈付き配列形式」を使用して格納する必要があります。これは、 _ArrayIsComplex_キーワードの存在と、構造体内の複素数値を_ArrayData_以下の順序でシリアル化することで実現されます。[[serialized real-part values], [serialized imag-part values]]

ネイティブデータ テキスト-JData/JSON形式 バイナリJData(BJData/ UBJSON )
a = 10.0 + 6 . 0 j
➡️
{ 
"a" :{ "_ArrayType_" : "double" , "_ArraySize_" :[ 1 , 1 ], "_ArrayIsComplex_" : true , "_ArrayData_" :[[ 10.0 ],[ 6.0 ]] } } 
  
  
  
  
 

[{]
[U][1][a]
[{]
[U][11][_配列型_] [S][U][6][倍精度]
[U][11][_配列サイズ_] [[] [U][2][U][3] []]
[U][16][_ArrayIsComplex_] [T]
[U][11][_ArrayData_] [[] [[][D][10.0][]] [[][D][6.0][]] []]
[}]
[}]
a =[ 
1 + 2 j , 3 + 4 j 5 + 6 j , 7 + 8 j ]  
  

➡️
{ 
"a" :{ "_ArrayType_" : "uint8" , "_ArraySize_" :[ 2 , 2 ], "_ArrayIsComplex_" : true "_ArrayData_" :[[ 1 , 3 , 5 , 7 ],[ 2 , 4 , 6 , 8 ]] } } 
  
  
  
  
 

[{]
[U][1][a]
[{]
[U][11][_ArrayType_] [S][U][5][uint8]
[U][11][_配列サイズ_] [[] [U][2][U][2] []]
[U][16][_ArrayIsComplex_] [T]
[U][11][_ArrayData_] [[]
[[] [$][U][#][4] [1][3][5][7]
[[] [$][U][#][4] [2][4][6][8]
[]]
[}]
[}]

疎配列

ネイティブデータ テキスト-JData/JSON形式 バイナリJData(BJData/ UBJSON )
a =スパース5、4 ; a 1、1 = 2.0 ; a 2、3 = 9.0 ; a 4、2 = 7.0 ;



➡️
{ 
"a" :{ "_ArrayType_" : "double" , "_ArraySize_" :[ 5 , 4 ], "_ArrayIsSparse_" : true , "_ArrayData_" :[[ 1 , 2 , 4 ],[ 1 , 3 , 2 ],[ 2.0 , 9.0 , 7.0 ]] } } 
  
  
  
  
 

[{]
[U][1][a]
[{]
[U][11][_配列型_] [S][U][6][倍精度]
[U][11][_配列サイズ_] [[] [U][2][U][3] []]
[U][16][_ArrayIsSparse_] [T]
[U][11][_ArrayData_] [[]
[[][$][U][#][3] [1][2][4]
[[][$][U][#][3] [1][3][2]
[[][$][D][#][3] [2.0][9.0][7.0]
[]]
[}]
[}]

複素数値スパース配列

ネイティブデータ テキスト-JData/JSON形式 バイナリJData(BJData/ UBJSON )
a =スパース( 5 , 4 ); 
a ( 1 , 1 )= 2.0 + 1  2 j ; 
a ( 2 , 3 )= 9.0 - 4  7j ;a ( 4 , 2 )= 7.0 + 1  0 j ;

➡️
{ 
"a" :{ "_ArrayType_" : "double" , "_ArraySize_" :[ 5 , 4 ], "_ArrayIsSparse_" : true , "_ArrayData_" :[[ 1 , 2 , 4 ],[ 1 , 3 , 2 ], [ 2.0 , 9.0 , 7.0 ],[ 1.2 , -4.7 , 1.0 ]] } } 
  
  
  
  

 

[{]
[U][1][a]
[{]
[U][11][_配列型_] [S][U][6][倍精度]
[U][11][_配列サイズ_] [[] [U][2][U][3] []]
[U][16][_ArrayIsSparse_] [T]
[U][11][_ArrayData_] [[]
[[][$][U][#][3] [1][2][4]
[[][$][U][#][3] [1][3][2]
[[][$][D][#][3] [2.0][9.0][7.0]
[[][$][D][#][3] [1.2][-4.7][1.0]
[]]
[}]
[}]

テーブル

  • JData仕様を参照
ネイティブデータ ➡️ テキスト-JData/JSON形式 バイナリJData(BJData/ UBJSON )
行名のないテーブル
名前 年齢 学位 身長
---- --- ------ ------
アンディ 21 BS 69.2
ウィリアム 21 MS 71.0
オム 22 BE 67.1
{ 
"_TableCols_" : [ "名前" , "年齢" , "学位" , "身長" ], "_TableRows_" : [], "_TableRecords_" : [ [ "アンディ" , 21 , "学士" , 69.2 ], [ "ウィリアム" , 21 , "修士" , 71.0 ], [ "オム" , 22 , "学士" , 67.1 ] ] }      
   
   
          
       
            
  

[{] 
[U][11][_TableCols_] [[]
[S][U][4][名前] [S][U][3][年齢]
[S][U][6][学位] [S][U][6][身長]
[]]
[U][11][_TableRows_] [[] []]
[U][14][_TableRecords_] [[]
[[] [S][U][4][アンディ] [U][21] [S][U][2][BS] [d][69.2] []]
[[] [S][U][7][ウィリアム] [U][21] [S][U][2][MS] [d][71.0] []]
[[] [S][U][2][Om] [U][22] [S][U][2][BS] [d][67.1] []]
[]]
[}]
列のデータ型の指定
{ 
"_TableCols_" : [ { "DataName" : "名前" , "DataType" : "文字列" }, { "DataName" : "年齢" , "DataType" : "int32" }, { "DataName" : "学位" , "DataType" : "文字列" }, { "DataName" : "身長" , "DataType" : "単精度" } ], "_TableRows_" : [], "_TableRecords_" : [ [ "Andy" , 21 , "学士" , 69.2 ], [ "William" , 21 , "修士" , 71.0 ], [ "Om" , 22 , "学士" , 67.1 ] ] }   
    
     
    
    
     
    
    
     
    
    
     
    
  
   
   
          
       
            
  

[{] 
[U][11][_TableCols_] [[]
[{] [S][U][8][DataName] [S][U][4][Name]
[S][U][8][DataType] [S][U][6][string]
[}]
[{] [S][U][8][DataName] [S][U][3][Age]
[S][U][8][DataType] [S][U][5][int32]
[}]
[{] [S][U][8][DataName] [S][U][6][Degree]
[S][U][8][DataType] [S][U][6][string]
[}]
[{] [S][U][8][DataName] [S][U][6][Height]
[S][U][8][DataType] [S][U][6][single]
[}]
[]]
[U][11][_TableRows_] [[] []]
[U][14][_TableRecords_] [[]
[[] [S][U][4][アンディ] [U][21] [S][U][2][BS] [d][69.2] []]
[[] [S][U][7][ウィリアム] [U][21] [S][U][2][MS] [d][71.0] []]
[[] [S][U][2][オム] [U][22] [S][U][2][BS] [d][67.1] []]
[]]
[}]

木々

  • JData仕様を参照
ネイティブデータ ➡️ テキスト-JData/JSON形式 バイナリJData(BJData/ UBJSON )
ツリーデータ構造
ルート={id:0,データ:10.1}
 ├── ノード1={id:1,data:2.5}
 ├── ノード2={id:2,data:100}
 │ ├── node2.1={id:3,data:9}
 │ └── node2.2={id:4,data:20.1}
 └── node3={id:5,data:-9.0}
 { 
"_TreeNode_(root)" : { "id" : 0 , "data" : 10.1 }, "_TreeChildren_" : [ { "_TreeNode_(node1)" : { "id" : 1 , "data" : 2.5 } }, { "_TreeNode_(node2)" : { "id" : 2 , "data" : 100 }, "_TreeChildren_" : [ { "_TreeNode_(node2.1)" : { "id" : 3 , "data" : 9 } }, { "_TreeNode_(node2.2)" : { "id" : 4 , "data" : 20.1 } } ] }, { "_TreeNode_(node3)" : { "id" : 5 , 「データ」: -9.0 } } ] }   
       
    
       
          
       
       
           
             
           
             
                
             
              
                
             
          
       
       
          
       
   
 
[{]
  [U][16][_TreeNode_(ルート)] [{]
    [U][2][id] [l][0] [U][4][データ] [d][10.1]
  [}]
  [U][14][_木の子供たち_] [[]
   [{] [U][16][_TreeNode_(ノード1)]
     [{] [U][2][id] [l][1] [U][4][データ] [d][2.5][}]
   [}]
   [{] [U][16][_TreeNode_(node2)]
     [{] [U][2][id] [l][2] [U][4][データ] [d][100][}]
       [U][14][_木の子供たち_] [[]
         [{] [U][16][_TreeNode_(node2.1)]
           [{] [U][2][id] [l][3] [U][4][データ][d][9][}]
         [}]
         [{] [U][16][_TreeNode_(node2.2)]
           [{][U][2][id][l][4][U][4][データ][d][20.1][}]
         [}]
       []]
   [}]
   [{] [U][16][_TreeNode_(node3)]
      [{] [U][2][id] [l][5] [U][4][データ] [d][-9.0][}]
   [}]
  []]
[}]

グラフ

  • JData仕様を参照
ネイティブデータ ➡️ テキスト-JData/JSON形式 バイナリJData(BJData/ UBJSON )
有向グラフオブジェクト
ヘッド ={id:0,データ:10.1}
    ⇓ e1
┌─node1={id:1,data:2.5}
│ ⇓ e2
│ node2={id:2,data:100}─┐
│ ⇓ e3 │
└➝node3={id:3,data:9} e7│
e6 ⇓ e4 │
  ノード4={id:4,データ:20.1}↲
    ⇓ e5
  尾 ={id:5,data:-9.0}
 { 
"_GraphNodes_" :[ "head" : { "id" : 0 , "data" : 10.1 }, "node1" :{ "id" : 1 , "data" : 2.5 }, "node2" :{ "id" : 2 , "data" : 100 }, "node3" :{ "id" : 3 , "data" : 9 }, "node4" :{ "id" : 4 , "data" : 20.1 }, "tail" : { "id" : 5 , "data" : -9.0 } ], "_GraphEdges_" :[ [ "head" , "node1" , "e1" ], [ "node1" , "node2" , "e2" ]、[ "ノード2" "ノード3" "e3" ]、[ "node3" "node4" "e4" ]、[ "node4" "tail" "e5" ]、[ "node1" "node3" "e6" ]、[ "node2" "node4" "e7" ] ] }   
      
      
      
        
     
      
   
   
      
     
     
     
      
     
     
   
 
[{]
  [U][12][_グラフノード_] [{]
     [U][4][ヘッド] [{] [U][2][id] [l][0] [U][4][データ] [d][10.1] [}]
     [U][5][ノード1][{] [U][2][id] [l][1] [U][4][データ] [d][2.5] [}]
     [U][5][node2][{] [U][2][id] [l][2] [U][4][データ] [d][100] [}]
     [U][5][ノード3][{] [U][2][id] [l][3] [U][4][データ] [d][9] [}]
     [U][5][ノード4][{] [U][2][id] [l][4] [U][4][データ] [d][20.1] [}]
     [U][4][尾] [{] [U][2][id] [l][5] [U][4][データ] [d][-9.0] [}]
  [}]
  [U][12][_グラフエッジ_] [[]
     [[] [S][U][4][ヘッド] [S][U][5][ノード1] [S][U][2][e1] []]
     [[] [S][U][4][ノード 1] [S][U][5][ノード 2] [S][U][2][e2] []]
     [[] [S][U][4][ノード2] [S][U][5][ノード3] [S][U][2][e3] []]
     [[] [S][U][4][node3] [S][U][5][node4] [S][U][2][e4] []]
     [[] [S][U][4][node4] [S][U][4][tail] [S][U][2][e5] []]
     [[] [S][U][4][ノード1] [S][U][5][ノード3] [S][U][2][e6] []]
     [[] [S][U][4][ノード 2] [S][U][5][ノード 4] [S][U][2][e7] []]
  []]
[}]

ソフトウェアエコシステム

テキストベースのJDataファイルはプレーンなJSONファイルであり、ほとんどの既存のJSONパーサーで容易に解析できます。JDataアノテーションタグを含むJSONファイルは、拡張子を.jdtにすることを推奨しますが、.jsonとして保存することもできます。.jdtファイルと.jsonファイルには、以下のようなわずかな違いがあります。

  1. JData .jdt ファイルは、 1 つのファイル内に複数の連結された JSONオブジェクトを受け入れます。
  2. JData .jdt 文字列は文字列内の改行を受け入れますが、JSON 仕様では改行文字を "\n" としてエンコードする必要があります。ほとんどの JSON パーサーは、「relaxed」解析モードを使用して文字列内の改行を処理できます。

JData 仕様のバイナリ インターフェイスは、バイナリ JData (BJData) 仕様によって定義されます。この形式は、主にUBJSON仕様ドラフト 12 から派生したものです。BJData 形式には、UBJSON に比べて 3 つの拡張機能が含まれています。1) BJData では、UBJSON ではサポートされていなかった 4 つの新しいデータ マーカー ([u]の場合"uint16"[m]の場合"uint32"[M]の場合"uint64"[h]の場合"float16") が導入されています。2) BJData では、最適化された型付き ND 配列コンテナーが導入されています。3) BJData では( )NaN/Infinityへのマッピングが停止され、代わりにそれぞれの IEEE754 表現が使用されます。 null[Z]

軽量なPython JDataエンコーダ/デコーダであるpyjdata [3]は、 PyPI 、Debian/Ubuntu、GitHubで入手可能です。辞書、配列、numpy ndarrayなど、幅広い複雑なデータ構造をJData表現に変換し、JSONまたはUBJSONファイルとしてエクスポートできます。BJData /UBJSONファイルの読み書きを可能にする BJData Pythonモジュールpybj [4]も、PyPI、Debian/Ubuntu、GitHubで入手可能です。

MATLABおよびGNU Octave向けのJSONLab v2.0は、最新のJData仕様のリファレンス実装であり、Debian/Ubuntu、Fedora、GitHubで入手可能です。JSONLabツールボックスはMATLAB File Exchange経由でも配布されており、最も人気のあるダウンロードパッケージの一つであり、Popular File 2018にも選出されています。

JavaScript向けには、ウェブページ内のJDataエンコードファイルを処理するためのJDataエンコーダ/デコーダ「jsdata」が開発されています。jsdataの代表的なアプリケーションとして、NIHが資金提供しているクラウドベースのモンテカルロ光子輸送シミュレーションプラットフォーム であるMCX Cloud [5]が挙げられます。

JData アノテーションを含む JSON ファイルをエンコード/デコードするためのコンパクトな関数も、Monte Carlo eXtreme 光子輸送シミュレータの一部として C/C++ で実装されています。

参照

参考文献

  1. ^ abc 「JData仕様 - バージョン1ドラフト2」。GitHub 2022年3月14日。
  2. ^ “NeuroJSON/jdata”. GitHub . 2022年3月14日.
  3. ^ 「JData for Python - 軽量で移植可能なデータ注釈方法」。
  4. ^ 「Python 用バイナリ JData - 軽量バイナリ JSON 形式」。
  5. ^ Fang, Qianqian; Yan, Shijie (2021). 「MCX Cloud – クラウドコンピューティングを活用した、最新かつスケーラブルで高性能なブラウザ内モンテカルロシミュレーションプラットフォーム」. doi : 10.1101/2021.06.28.450034 . S2CID  235700017. {{cite journal}}:ジャーナルを引用するには|journal=ヘルプ)が必要です
  • 公式サイト
  • NeuroJSONプロジェクト
  • JData仕様(最新)
  • バイナリ JData (BJData) 仕様 (最新)
Retrieved from "https://en.wikipedia.org/w/index.php?title=JData&oldid=1323402375"