5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ZOZOAdvent Calendar 2024

Day 9

ISONについて

Last updated at Posted at 2024-12-08

ISONはJSONとの互換性を持ちつつも日付や他の型のサポートやコメントなどの機能を拡張したフォーマットです。

ISONにはJSONにない型がいくつかあります。

日付型

UNIXタイムスタンプを使って日付を表す型(Data)があります。

Date(1532524806137)

数値型

16進数、2進数、8進数のリテラルがサポートされています。
8進数の表記がC言語と異なっていることに注意が必要です。

{
  a: 0xFF,  // Hex
  b: 0b11111111,  // Binary
  c: 0o377, // Octal
  d: 255 // Decimal
}

文字列型

文字列はダブルクォートだけではなくシングルクォートで囲むことができます。

オブジェクト型

オブジェクト型のキーはこの正規表現 /[a-z_][_a-z0-9]*/i にマッチする場合にはクォートで囲む必要がないです。
Object型を表現するためには2通りの方法がありますが後者の方がシンプルなので望ましいです。

Object({ a: 1 }) === { a: 1 }

配列型

配列型を表現するためにも2通りの方法がありますが、オブジェクト型と同様に後者の方がシンプルなので望ましいです。

Array( 1, 2, 3 ) === [ 1, 2, 3 ]

その他の型

ISONはbuffer, 正規表現、集合、マップなどの型もサポートしています。
これらの方はデシリアライズした際に、各言語の対応する方に変換されることが期待されています。

{
  // Dates via unix timestamp
  created: Date(1532571987475),

  // Buffers stored in hex, ascii, etc.
  data: Buffer('deadbeef', 'hex'),
  name: Buffer('hello, world!', 'ascii'),

  // Regular expressions
  regex: RegExp('0x[a-f0-9]+', 'i'),

  // Sets
  set: Set([ 1,2,3,4 ]),

  // Maps
  map: Map([
    ['abc', 'def'],
    ['ghi', 'jkl']
  ])
}

カスタム型

更にISONはカスタム型を追加するためのインターフェースも持っています。
以下の例はLocation型というカスタム型を追加しています。

const ison = require('ison')

class Location {
  constructor({ latitude, longitude }) {
    this.latitude = latitude
    this.longitude = longitude
  }

  destructor() {
    return {
      latitude: this.latitude,
      longitude: this.longitude
    }
  }
}
ison.addTypes({ Location }) // Required for parsing locations back into a Location instance
ison.stringify(new Location({ latitude: 12.3456, longitude: 98.6765 })) // -> 'Location({latitude:12.3456,longitude:98.6765})'

出展:
https://github.com/richinfante/ison

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?