情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Node.jsでクエリ文字列をパースする

2016/11/26

クエリ文字列とはURI(URL)のクエリ部分のことです。

クエリ文字列をパースするには下のようなモジュールを利用する方法があります。

  • querystring
  • qs

querystringモジュール

querystring.parse関数を使用します。

var querystring = require('querystring');

var q = querystring.parse('xxx');

第1引数にクエリ文字列を指定します。

返り値としてクエリ文字列を表すオブジェクトが得られます。

このオブジェクトではクエリ文字列のキーがプロパティ名となり、値がプロパティの値となります。クエリ文字列に同一のキーが複数存在する場合にはプロパティの値はそれらの値を全て含む配列となります。

qsモジュール

qs.parse関数を使用します。

var qs = require('qs');

var q = qs.parse('xxx', {
    depth: 5, 
    parameterLimit: 1000, 
    delimiter: '&', 
    allowDots: false, 
    arrayLimit: 20, 
    parseArrays: true
});

第1引数にクエリ文字列を指定します。

第2引数にオプションをオブジェクトとして指定します。この引数は指定しなくても構いません。

返り値としてクエリ文字列を表すオブジェクトが得られます。

この関数はquerystring.parse関数と同様ですが、クエリ文字列のサブキーをパースすることができます。

サブキーとはキーに付加された別の1つ以上のキーであり、[]で囲みます。

たとえば、サブキーを含むクエリ文字列は?foo[bar][baz]=quxのようなものとなります。この場合、サブキーはbarbazです。

この関数がサブキーをパースした結果は入れ子のオブジェクトとなります。

たとえば、?foo[bar][baz]=quxのパース結果は{ foo: { bar: { baz: 'qux' } }となります。

ただし、全てのサブキーが20以下の数値か空の文字列である場合にはサブキーをパースした結果は配列となります。

たとえば、?foo[0]=bar&foo[1]=baz&foo[2]=quxのパース結果は{ foo: ['bar', 'baz', 'qux'] }となります。

第2引数のオプションには主に下のようなものがあります。

  • depth・・・サブキーの最大数を指定します。デフォルトは5です。
  • parameterLimit・・・パラメータの最大数を指定します。デフォルトは1000です。
  • delimiter・・・パラメータの区切り文字を文字列か正規表現として指定します。デフォルトは&です。
  • allowDots・・・サブキーを[]で囲むのではなく、冒頭に.を付加するものとするかを真偽値として指定します。デフォルトはfalseです。
  • arrayLimit・・・サブキーをパースした結果が配列となる最大の数値を指定します。デフォルトは20です。
  • parseArrays・・・サブキーの配列へのパースを有効にするかを真偽値として指定します。デフォルトはtrueです。

サンプルコード1

querystring.parse関数の使用例です。

querystring-parse.js

var querystring = require('querystring');

console.log(querystring.parse('name=%E8%B5%A4%E5%B6%BA%E5%9D%82%E5%BD%A9%E9%87%8C&property=%E3%83%84%E3%83%B3%E3%83%87%E3%83%AC&property=%E5%89%AF%E7%94%9F%E5%BE%92%E4%BC%9A%E9%95%B7&property=%E5%B0%BB&b=90&w=56&h=85'));

実行結果

C:\work\node>node querystring-parse.js
{ name: '赤嶺坂彩里',
  property: [ 'ツンデレ', '副生徒会長', '尻' ],
  b: '90',
  w: '56',
  h: '85' }

サンプルコード2

qs.parse関数の使用例です。

qs-parse.js

var qs = require('qs');

console.log(qs.parse('char[name]=%E8%B5%A4%E5%B6%BA%E5%9D%82%E5%BD%A9%E9%87%8C&char[property]=%E3%83%84%E3%83%B3%E3%83%87%E3%83%AC&char[property]=%E5%89%AF%E7%94%9F%E5%BE%92%E4%BC%9A%E9%95%B7&char[property]=%E5%B0%BB&char[b]=90&char[w]=56&char[h]=85'));

使用パッケージ

  • qs
    npm install qsでインストールします。

実行結果

C:\work\node>node qs-parse.js
{ char:
   { name: '赤嶺坂彩里',
     property: [ 'ツンデレ', '副生徒会長', '尻' ],
     b: '90',
     w: '56',
     h: '85' } }

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js