将HTTP样式的键值对解析为java.util.HashMap

时间:2012-08-08 18:26:19

标签: java android parsing hashmap key-value

我正在使用一种Web服务,它将响应呈现为HTTP样式的键值对列表。我想将它们解析为HashMap。我不想写解析器。我想修改我当前的hackish解决方案,string.split("&")后跟一系列string.split("=")调用,其中插入逻辑。

在SO-land那里有人知道有关这样做的图书馆的引用吗?我在Apache和javax中浏览过但看不太多。我在Android中这样做。

回复的一个简单示例是:

result=success&id=8a8d3c30-e184-11e1-9b23-0800200c9a66&name=wahooooooo

理想的功能:

public HashMap<String, String> parse(InputStream in);

3 个答案:

答案 0 :(得分:4)

如果你有apache库,你可以像这样使用URLEncodedUtils类:

    HashMap<String, String> parameters = new HashMap<String, String>();

    String query = "result=success&id=8a8d3c30-e184-11e1-9b23-0800200c9a66&name=wahooooooo";
    List<NameValuePair> params = URLEncodedUtils.parse(query, Charset.defaultCharset());
    for (NameValuePair nameValuePair : params) {
        parameters.put(nameValuePair.getName(), nameValuePair.getValue());
    }

答案 1 :(得分:2)

您可以使用UrlEncodedUtils

只需调用URLEncodedUtils.parse(yourString,Charset.forName("UTF-8")).

您将获得一个包含名称和值相关元素的List<NameValuePair>

请参阅:HttpComponents

here是一个简单的程序

答案 2 :(得分:0)

已经回答,但这里是URLEncodedUtils

的替代方案
public static HashMap<String, String> getQueryString(String url) {
    Uri uri= Uri.parse(url);

    HashMap<String, String> map = new HashMap<>();
    for (String paramName : uri.getQueryParameterNames()) {
        if (paramName != null) {
            String paramValue = uri.getQueryParameter(paramName);
            if (paramValue != null) {
                map.put(paramName, paramValue);
            }
        }
    }
    return map;
}