#json #web #url #parser

queryst

Rust query string parser with nesting support, forked to update Serde

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

#413 in Web programming

Download history 934/week @ 2023-11-02 841/week @ 2023-11-09 780/week @ 2023-11-16 614/week @ 2023-11-23 648/week @ 2023-11-30 854/week @ 2023-12-07 728/week @ 2023-12-14 467/week @ 2023-12-21 583/week @ 2023-12-28 889/week @ 2024-01-04 921/week @ 2024-01-11 949/week @ 2024-01-18 904/week @ 2024-01-25 934/week @ 2024-02-01 808/week @ 2024-02-08 795/week @ 2024-02-15

3,618 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.4–1.3MB
~26K SLoC