如何从URL查询字符串中读取JSON对象

时间:2013-05-02 14:42:37

标签: java json spring spring-mvc

我有这样的网址请求:

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请求。

从此网址我需要将过滤器相关数据作为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框架。

2 个答案:

答案 0 :(得分:2)

这些网址参数不是JSON格式。我不确定你的问题是什么?你不能只从URL中读取每个参数,然后根据需要从字符串中解析数据吗?您可以将其作为单个参数并基于自定义字符进行标记,或者您可以遍历所有参数并解析每个参数并将它们添加到数组中。

您是说您需要以JSON格式返回数据吗?如上所述,使用解析后的参数获取数据,然后当您拥有数据时仅序列化该对象并将其作为响应主体通过线路传回。您将需要使用像Jackson这样的JSON序列化库,它会将对象写入JSON中的字符串。

答案 1 :(得分:1)

如果数据是用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);
} 

您的数据格式似乎不是标准格式,因此您必须自己解析它。