Andreas Andreas - 10 months ago 49
JSON Question

Standardized way to serialize JSON to query string?

I'm trying to build a restful

and I'm struggling on how to serialize
data to a
HTTP query string

There are a number of mandatory and optional arguments that need to be passed in the request, e.g (represented as a JSON object below):

"-columns" : [
"-where" : {
"-or" : {
"customer_id" : 1,
"services" : "schedule"
"-limit" : 5,
"return" : "table"

I need to support a various number of different clients so I'm looking for a standardized way to convert this json object to a query string. Is there one, and how does it look?

Another alternative is to allow users to just pass along the json object in a message body, but I read that I should avoid it (HTTP GET with request body).

Any thoughts?

Edit for clarification:

Listing how some different languages encodes the given json object above:

  • jQuery
    : -columns[]=name&-columns[]=column&-where[-or][customer_id]=1&-where[-or][services]=schedule&-limit=5&return=column

  • PHP
    : -columns[0]=name&-columns[1]=column&-where[-or][customer_id]=1&-where[-or][services]=schedule&-limit=5&return=column

  • Perl
    : -columns=name&-columns=column&-where=HASH(0x59d6eb8)&-limit=5&return=column

  • Perl
    : -columns:0=name&-columns:1=column&-limit=5&-where.-or.customer_id=1&

jQuery and PHP is very similar. Perl using complex_to_query is also pretty similar to them. But none look exactly the same.

Answer Source

URL-encode ( your JSON text and put it into a single query string parameter. for example, if you want to pass {"val": 1}:

Note that if your JSON gets too long then you will run into a URL length limitation problem. In which case I would use POST with a body (yes, I know, sending a POST when you want to fetch something is not "pure" and does not fit well into the REST paradigm, but neither is your domain specific JSON-based query language).