[hunchentoot-devel] parameter-type hash-table encoded with [] or {}
Edi Weitz
edi at agharta.de
Fri Apr 23 20:05:57 UTC 2010
Making this customizable would be OK with me. The only problem I see
is that the current pair of delimiters is hard-coded into the regexp
and it's probably not a good idea to compute the regexp anew each time
the function is called. I also think only paired delimiters like (),
[], {}, <> really make sense. Any comments?
If you want to have this in Hunchentoot, please send a patch against
the diff version following the usual guidelines:
http://weitz.de/patches.html
Thanks,
Edi.
2010/4/23 Knut Olav Bøhmer <bohmer at gmail.com>:
> Hi,
>
> When I post json objects from jquery
>
> $.ajax({
> type: 'POST',
> url: '/url',
> dataType: 'json',
> data: {"key":"val","hash",{"foo":"bar"}}
>
> then the "hash" parameter is posted like this: "hash[foo]=bar"
>
> If I then in hunchentoot have
>
> (define-easy-handler (fn :uri "/url")
> ((hash :parameter-type 'hash-table))
> .....
>
> The hash is expected to be posted like this: "hash{foo}=bar"?
> So I wonder if it would be correct to enable the "hash[foo]=bar" syntax for
> hash tables.
>
> Maybe it should be an argument that specifies if
> compute-hash-table-parameter should use [] or {}.
> This little experiment worked for me, here I just added \\[ and \\] to the
> regexp.
>
> Should I bother to make a patch?
>
> (defun compute-hash-table-parameter (parameter-name type parameters key-type
> test-function)
> "Retrieves all parameters from PARAMETERS which are named
> like
> \"PARAMETER-NAME{FOO}\" or \"PARAMETER-NAME[FOO]\" \(where FOO is any
> sequence of
> characters
> not containing curly brackets), converts them to TYPE,
> and
> returns a hash table with test function TEST-FUNCTION where
> the
> corresponding value is associated with the key FOO \(converted
> to
> KEY-TYPE)."
> (let ((hash-table (make-hash-table :test test-function)))
> (loop for (full-name . value) in parameters
> for key = (register-groups-bind (name key-string)
> ("^(.*)[{\\[]([^\\[\\]{}]+)[}\\]]$" full-name)
> (when (string= name parameter-name)
> (convert-parameter key-string key-type)))
> when key
> do (setf (gethash key hash-table)
> (convert-parameter value type)))
> hash-table))
>
>
> --
> Knut Olav Bøhmer
>
> _______________________________________________
> tbnl-devel site list
> tbnl-devel at common-lisp.net
> http://common-lisp.net/mailman/listinfo/tbnl-devel
>
More information about the Tbnl-devel
mailing list