23 releases (7 stable)

3.0.0 May 13, 2023
2.1.0 Dec 13, 2020
2.0.2 Jun 6, 2020
2.0.1 Feb 6, 2020
0.1.0 Nov 23, 2014

#445 in Web programming

Download history 678/week @ 2024-08-10 491/week @ 2024-08-17 446/week @ 2024-08-24 462/week @ 2024-08-31 802/week @ 2024-09-07 1140/week @ 2024-09-14 1181/week @ 2024-09-21 1402/week @ 2024-09-28 787/week @ 2024-10-05 1059/week @ 2024-10-12 1388/week @ 2024-10-19 1158/week @ 2024-10-26 733/week @ 2024-11-02 916/week @ 2024-11-09 1063/week @ 2024-11-16 1214/week @ 2024-11-23

4,127 downloads per month
Used in 6 crates (3 directly)

MIT license

19KB
450 lines

What is Queryst?

This is a fork of the original, with serde and serde_json updated to 0.9

A query string parsing library for Rust inspired by https://github.com/hapijs/qs. A part of REST-like API micro-framework Rustless.

# Cargo.toml

[dependencies]
queryst = "1"

API docs

Usage

Use queryst library to parse query-string to corresponding json values.

use queryst::parse;

// will contain result as Json value
let object = parse("foo[0][a]=a&foo[0][b]=b&foo[1][a]=aa&foo[1][b]=bb");

Description

queryst allows you to create nested objects within your query strings, by surrounding the name of sub-keys with square brackets []. or example, the string 'foo[bar]=baz' converts to this JSON:

{
  "foo": {
    "bar": "baz"
  }
}

URI encoded strings work too:

parse('a%5Bb%5D=c');
// { "a": { "b": "c" } }

You can also nest your objects, like 'foo[bar][baz]=foobarbaz':

{
  "foo": {
    "bar": {
      "baz": "foobarbaz"
    }
  }
}

Parsing Arrays

queryst can also parse arrays using a similar [] notation:

parse('a[]=b&a[]=c');
// { "a": ["b", "c"] }

You may specify an index as well:

parse('a[0]=c&a[1]=b');
// { "a": ["c", "b"] }

Note that the only difference between an index in an array and a key in an object is that the value between the brackets must be a number to create an array.

queryst does't allow to specify sparse indexes on arrays and will convert target array to object:

parse('a[1]=b&a[15]=c');
// { "a": {"1": "b", "15": "c"} }

Also if you mix notations, queryst will merge the two items into an object:

parse('a[0]=b&a[b]=c');
// { "a": { "0": "b", "b": "c" } }

You can also create arrays of objects:

parse('a[][b]=c');
// { "a": [{ "b": "c" }] }

Dependencies

~0.5–1.5MB
~29K SLoC