首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Racket中的REST解析

Racket中的REST解析
EN

Stack Overflow用户
提问于 2015-07-14 16:48:41
回答 1查看 920关注 0票数 3

为了教育目的,我正在开发Racket中的rest服务,并面临着JSON解析的问题。我有以下要求

代码语言:javascript
复制
"{\"word\": \"a\", \"desc\": \"b\"}"

此外,我还有此请求的请求处理程序,如

代码语言:javascript
复制
 (define (add-word-req req)
     (define post-data (request-post-data/raw req))
     (display post-data)
     (newline)

     (define post-data-expr1 (bytes->jsexpr post-data))
     (display post-data-expr1)
     (newline)
     (display (jsexpr? post-data-expr1))
     (display (hash? post-data-expr1))
     (newline)

     (define post-data-expr (string->jsexpr "{\"word\": \"a\", \"desc\": \"b\"}"))
     (display post-data-expr)
     (newline)

     (display (hash? post-data-expr))
     (newline)

     (for (((key val) (in-hash post-data-expr)))
       (printf "~a = ~a~%" key val))

     (cond 
       [(jsexpr? post-data-expr)
       ;; some conditional work
       ...
      ]
       [else 
       ...]
      )
     )

如您所见,请求体和硬编码的JSON是相同的。

在处理请求时,我得到了下一个输出:

代码语言:javascript
复制
 "{\"word\": \"a\", \"desc\": \"b\"}"
 {"word": "a", "desc": "b"}
 #t#f
 #hasheq((desc . b) (word . a))
 #t
 desc = b
 word = a

身体是一个整体传输,甚至转化成jsexpr,但它仍然不是哈希!正因为如此,我不能使用散列方法来处理后数据-expr1。

从这样的jsexpr中获取散列的最佳方法是什么?还是应该使用另一种方法来获取键/值?

致以问候。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-14 17:02:27

这个项目:

代码语言:javascript
复制
#lang racket
(require json)
(string->jsexpr "{\"word\": \"a\", \"desc\": \"b\"}")
(bytes->jsexpr #"{\"word\": \"a\", \"desc\": \"b\"}")

有输出:

代码语言:javascript
复制
'#hasheq((desc . "b") (word . "a"))
'#hasheq((desc . "b") (word . "a"))

这意味着bytes->jsexpr应该能工作。

你能改变一下吗?

代码语言:javascript
复制
 (define post-data (request-post-data/raw req))
 (display post-data)
 (newline)

代码语言:javascript
复制
 (define post-data (request-post-data/raw req))
 (write post-data)
 (newline)

我有一种感觉,字节字符串的内容与稍后使用的字符串略有不同。

注意:

代码语言:javascript
复制
> (displayln "{\\\"word\\\": \\\"a\\\", \\\"desc\\\": \\\"b\\\"}")
{\"word\": \"a\", \"desc\": \"b\"}

> (displayln "{\"word\": \"a\", \"desc\": \"b\"}")
{"word": "a", "desc": "b"}

(display post-data-expr1)的输出与上面的第一个交互匹配。因此,我的猜测是,反斜杠和引号都在您的输入中转义。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31412685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档