小编典典

序列化JSON以查询字符串的标准化方法?

json

我正在尝试建立一个宁静的环境,API并且正在努力将JSON数据序列化到HTTP query string

在请求中需要传递许多强制性和可选参数,例如(以下表示为JSON对象):

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

我需要支持各种不同的客户端,因此我正在寻找一种标准化的方法来将此json对象转换为查询字符串。有一个,看起来怎么样?

另一种选择是允许用户仅在消息正文中传递json对象,但我读到我应该避免使用它。

有什么想法吗?

编辑以澄清:

在上面列出一些不同的语言如何编码给定的json对象:

  • jQuery使用$.param:-columns [] = name&-columns [] = column&-where [-or] [customer_id] = 1&-where [-or] [services] = schedule&-limit = 5&return = column
  • PHP使用http_build_query:-columns [0] = name&-columns [1] = column&-where [-or] [customer_id] = 1&-where [-or] [services] = schedule&-limit = 5&return = column
  • Perl使用URI::query_form:-columns = name&-columns = column&-where = HASH(0x59d6eb8)&-limit = 5&return = column
  • Perl使用complex_to_query:-columns:0 = name&-columns:1 = column&-limit = 5&-where.-or.customer_id = 1&-where.-or.services = schedule&return = column

jQuery和PHP非常相似。使用complex_to_query的Perl也与它们非常相似。但是没有一个看起来完全一样。


阅读 526

收藏
2020-07-27

共1个答案

小编典典

对您的JSON文本进行URL编码(https://en.wikipedia.org/wiki/Percent-
encoding),并将其放入单个查询字符串参数中。例如,如果您想通过{"val": 1}

mysite.com/path?json=%7B%22val%22%3A%201%7D

请注意,如果您的JSON太长,则会遇到URL长度限制问题。在这种情况下,我将使用POST主体(是的,我知道,POST当您要获取某些内容时发送的消息不是“纯”的,并且不太适合REST范例,但是您的基于域的特定于JSON的查询语言也不是)

2020-07-27