情報アイランド

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

Node.jsでクエリ文字列を表すオブジェクトをクエリ文字列に変換する

2016/11/26

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

クエリ文字列を表すオブジェクトをクエリ文字列に変換するには下のようなモジュールを利用する方法があります。

  • querystring
  • qs

querystringモジュール

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

var querystring = require('querystring');

var q = querystring.stringify({ xxx: 'foo', yyy: ['bar', 'baz'] });

第1引数にクエリ文字列を表すオブジェクトを指定します。

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

返り値としてクエリ文字列が得られます。

qsモジュール

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

var qs = require('qs');

var q = qs.stringify({ xxx: 'foo', yyy: ['bar', 'baz'] }, {
    delimiter: '&'
});

第1引数にクエリ文字列を表すオブジェクトを指定します。

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

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

この関数はquerystring.stringify関数と同様ですが、入れ子のオブジェクトをクエリ文字列に変換することができます。

この関数が入れ子のオブジェクトをクエリ文字列に変換した結果はサブキーとなります。

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

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

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

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

  • delimiter・・・パラメータの区切り文字を文字列か正規表現として指定します。デフォルトは&です。

サンプルコード1

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

querystring-stringify.js

var querystring = require('querystring');

console.log(querystring.stringify({ name: '赤嶺坂彩里', property: ['ツンデレ', '副生徒会長', '尻'], b: '90', w: '56', h: '85' }));

実行結果

C:\work\node>node querystring-stringify.js
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

サンプルコード2

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

qs-stringify.js

var qs = require('qs');

console.log(qs.stringify({ char: { name: '赤嶺坂彩里', property: ['ツンデレ', '副生徒会長', '尻'], b: '90', w: '56', h: '85' } }));

使用パッケージ

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

実行結果

C:\work\node>node qs-stringify.js
char%5Bname%5D=%E8%B5%A4%E5%B6%BA%E5%9D%82%E5%BD%A9%E9%87%8C&char%5Bproperty%5D%5B0%5D=%E3%83%84%E3%83%B3%E3%83%87%E3%83%AC&char%5Bproperty%5D%5B1%5D=%E5%89%AF%E7%94%9F%E5%BE%92%E4%BC%9A%E9%95%B7&char%5Bproperty%5D%5B2%5D=%E5%B0%BB&char%5Bb%5D=90&char%5Bw%5D=56&char%5Bh%5D=85

関連

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

-Node.js