java - 如何在java中有效解析查询参数?

标签 java json hashmap deserialization

我所拥有的只是请求 URI,我必须从中解析查询参数。我正在做的是将它们添加到 json/hashmap 并再次获取,如下所示

String requestUri = "name=raju&school=abcd&college=mnop&color=black&fruit=mango";

我所要做的就是最终将其分配给如下变量

String name = "raju";
String school = "abcd";
String college = "mnop";
String color = "black";
String fruit = "mango";

所以我像下面这样解析请求uri

String[] paramsKV = requestUri.split("&");
JSONArray jsonKVArr = new JSONArray();
for (String params : paramsKV) {
    String[] tempArr = params.split("=");
    if(tempArr.length>1) {
        String key = tempArr[0];
        String value = tempArr[1];
        JSONObject jsonObj = new JSONObject();
        jsonObj.put(key, value);
        jsonKVArr.put(jsonObj);
     }
 }

另一种方式是将same填充到hash map中获取same。另一种方式是将requestUri字符串与正则表达式匹配并获得结果。

举个例子来获取 school 的值 我必须匹配字符串 school 的起点和下一个 & - 这听起来不太好。

  1. 在 java 中解析查询字符串的更好方法是什么?
  2. 我怎样才能更好地处理以下事情?

我需要根据上面的结果构造另一个 HashMap ,如下所示

Map<String, String> resultMap = new HashMap<String, String>;

resultMap.put("empname", name);
resultMap.put("rschool", school);
resultMap.put("empcollege", college);
resultMap.put("favcolor", color);
resultMap.put("favfruit", fruit);

为了简单起见,我所要做的就是解析查询参数并通过以不同方式命名 key 文件来构造一个 hashMap。我怎么能以简单的方式做到这一点?非常感谢这方面的任何帮助。

最佳答案

简短回答:每个 HTTP 客户端库都会为您做这件事。

示例:Apache HttpClient 的 URLEncodedUtils

String queryComponent = "name=raju&school=abcd&college=mnop&color=black&fruit=mango";
List<NameValuePair> params = URLEncodedUtils.parse(queryComponent, Charset.forName("UTF-8"));

他们基本上以同样的方式接近它。参数键值对由 & 分隔,值中的键由 = 分隔,因此字符串的 split 适用于两者。

据我所知,您的 hashmap 插入将新键映射到现有值,因此实际上没有优化,可能为了可读性/维护而移动到 Java 8 Stream 和/或丢弃初始 jsonArray 并直接映射到 HashMap 。

关于java - 如何在java中有效解析查询参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43602883/

相关文章:

java - 如何在vaadin中使用PollListener?

java - 从可绘制文件夹获取图像并调整其大小时出现 NullPointerException

javascript - 在 sequelize js 中获取关系的值(value)

java - 创建键值对象列表

java - 如何取消订阅 TornadoFX 中的 Activity ?

javascript 读取 JSON 文件后无法迭代数组

javascript - 尝试与 odata 响应绑定(bind)时,Nan 正在 json 模型中设置

Java:HashMap 到嵌套 JSON 对象

java - Java 中的 "double, Double, HashSet"

java.lang.IllegalArgumentException : Context must not be null