0

我正在使用一个 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);
4

3 回答 3

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());
    }
于 2012-08-08T18:38:04.493 回答
2

您可以使用UrlEncodedUtils

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

你会得到一个List<NameValuePair>包含名称和值的关联元素。

看到这个:HttpComponents

是一个简单的程序

于 2012-08-08T18:31:15.153 回答
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;
}
于 2016-08-25T18:08:32.363 回答