【问题标题】:How can I parse a 2D array in a query string?如何解析查询字符串中的二维数组?
【发布时间】:2014-09-18 05:02:14
【问题描述】:

我有以下 jQuery 调用(我无法更改):

$.ajax({    url: "http://localhost/lookup-coord",
            jsonp: 'cb',
            dataType: 'jsonp',
            data: {'coord' : [[1,1],[1,2],[1,3]]},
            success: function(response) {
                console.log("Got the response: " + response);
            }
      });

我的 Web 应用程序收到以下查询字符串:

coord[0][]=1&coord[0][]=1&coord[1][]=1&coord[1][]=2&coord[2][]=1&coord[2][]=3

我想知道如何在 Scala Play 中将该查询字符串解析为一个数组。有没有开箱即用的方法来做到这一点?

【问题讨论】:

  • 应该可以解决,但是建议修改发送数据格式。看看fiddle 看看我的意思。
  • @Regent 我无法控制客户端 Javascript 代码,也无法对其进行更改。
  • 好吧,那$.ajax和标签jquery就不用提了。

标签: jquery scala web-applications playframework


【解决方案1】:

转换为数组

scala>  val str = "coord[0][]=1&coord[0][]=1&coord[1][]=1&coord[1][]=2&coord[2][]=1&coord[2][]=3"
str: String = coord[0][]=1&coord[0][]=1&coord[1][]=1&coord[1][]=2&coord[2][]=1&coord[2][]=3

scala> val it = str.split("&").map(x => x.split("=")(1)).grouped(2)
it: Iterator[Array[String]] = non-empty iterator

scala> it.map(array => array.mkString("[",",","]")).mkString("[",",","]")
res0: String = [[1,1],[1,2],[1,3]]

或者:

scala> str.split("&").map(x => x.split("=")(1)).grouped(2).toList
res2: List[Array[String]] = List(Array(1, 1), Array(1, 2), Array(1, 3))

【讨论】:

    【解决方案2】:

    根据我的理解,您希望查询字符串是这样的:

    http://localhost/lookup-coord/[[1,1],[1,2],[1,3]
    

    一个简单的方法是使用 JSON.stringify()

    var arr = [[1,1],[1,2],[1,3]];
    $.ajax({    url: "http://localhost/lookup-coord",
            jsonp: 'cb',
            dataType: 'jsonp',
            data: {'coord' : JSON.stringify(arr)},
            success: function(response) {
                console.log("Got the response: " + response);
            }
      });
    

    您可以参考以下链接:MDN - JSON.stringify

    【讨论】:

      【解决方案3】:

      如果您想将数组发送到给定文件(在这种情况下为http://localhost/lookup-coord) 可能最好的想法是这样的:

      // create empty array
      var values = [];
      
      // push the values
      
          values.push(1);
          values.push(2);
      
      // when sending a parameter as an array we have to add [] after the name of the variable 
      

      我们想发送并用单引号包裹变量名 例如(在这种情况下)

      $.post('file.php',{'var[]',values,another-var:val2},function(data){
      
      console.log('this is the retrieved data from the target file');
      
      });
      

      规则很简单 如果您使用的是 jquery http request($.ajax,$.post,$.get) 那么
      如果变量是一个数组,那么这样做 'var-name[]':values 别的 var-name:single-value

      【讨论】:

        猜你喜欢
        • 2019-02-18
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 2011-07-20
        • 1970-01-01
        • 1970-01-01
        • 2016-11-04
        • 1970-01-01
        相关资源
        最近更新 更多