我正在使用一种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);
答案 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;
}