如何读取URL查询字符串
问题描述:
JSON对象我有一个这样的URL请求:如何读取URL查询字符串
http://localhost:8080:_dc=1367504213107&filter[0][field]=site&filter[0][data][type]=string&filter[0][data][value]=test&filter[1][field]=address&filter[1][data][type]=string&filter[1][data][value]=Columbus
这是URL请求,我从浏览器中得到。
从这个URL,我需要获取过滤器相关数据作为JSON对象。
基本上我有过滤参数,如这些在请求的URL:
filter[0][field]=site
filter[0][data][type]=string
filter[0][data][value]=test
filter[1][field]=address
filter[1][data][type]=string
filter[1][data][value]=Columbus
我使用Spring MVC框架。
答
这些URL参数不是JSON格式。我不确定你的问题在这里是什么......你不能只是从URL中读取每个参数,然后根据需要从字符串中解析数据吗?您可以将其作为单个参数并基于自定义字符进行标记化,也可以循环遍历所有参数并解析每个参数并将其添加到数组中。
你是说你需要以JSON格式返回数据吗?如上所述,使用解析的参数获取数据,然后当数据只是序列化该对象并将其作为响应的主体传回时。您将需要使用像Jackson这样的JSON序列化库,它将为JSON将对象写入JSON字符串中。
答
这是该数据可能会看起来一样,如果它被写了JSON:
{
"filter":
[
{
"field": "site",
"data":
{
"type": "string",
"value": "test"
}
},
{
"field": "address",
"data":
{
"type": "string",
"value": "Columbus"
}
}
]
}
从上面的JSON转换到您的格式
Java代码:
JSONObject root = new JSONObject(json);
JSONArray filters = root.getJSONArray("filter");
for (int i = 0; i < filters.length(); i++)
{
JSONObject filter = filters.getJSONObject(i);
String field = filter.getString("field");
JSONObject data = filter.getJSONObject("data");
String dataType = data.getString("type");
String dataValue = data.getString("value");
System.out.println("filter[" + i + "][field]=" + field);
System.out.println("filter[" + i + "][data][type]=" + dataType);
System.out.println("filter[" + i + "][data][value]=" + dataValue);
}
你的数据格式看起来不是标准的,所以你必须自己解析它。
这看起来不像JSON。看起来你正在传递一张地图地图列表。无论如何,你应该能够使用ModelAttribute,或者简单地使用RequestParams来抓取它们。但我不确定RequestParams如何处理下标。 – CodeChimp 2013-05-02 19:09:29