Java中将URL参数转换(解析)为JSON

10

我有一个REST客户端,它将URL作为参数传递。但是我的云REST架构仅接受JSON格式。

有没有办法在Java中将URL参数转换(解析)为JSON格式?

URL参数示例:

data=data10&sensor=sensor10&type=type10
{"key": "value"}
{"data":"data10","sensor":"sensor10","type":"type10"}
2个回答

10

解决方案

没有现成的解决方案,因此开发一种方法来解决是最实用的。

这是一个将参数转换为JSON的方法:

public static String paramJson(String paramIn) {
    paramIn = paramIn.replaceAll("=", "\":\"");
    paramIn = paramIn.replaceAll("&", "\",\"");
    return "{\"" + paramIn + "\"}";
}

结果

方法输入:

data=data10&sensor=sensor10&type=type10

方法返回输出:

{"data":"data10","sensor":"sensor10","type":"type10"}

这种方法可能有效。但是我不确定为什么你要迭代每个字符,当你可以分别针对“&”和“=”调用paramIn.replaceAll("whatever", "whatever else")一次。 - rufism
@rufism 我必须同意你的观点,我真的不记得为什么要使用for循环了,但是现在我正在更新我的解决方案,它仍然有效。顺便说一句,我也投票支持你的答案。 - Maytham Fahmi
我认为应该包括.replaceAll("\\+", " ") - Ghostff
@Ghostff 谢谢,这个方法只是一个简单的转换器,可以在不同的方向上进行操作。如果在您的情况下需要添加\\+,请以最适合的方式进行操作。如果有其他原因我没有理解,请解释一下。 - Maytham Fahmi

3
尝试使用URLEncoder/URLDecoder方法的encode()和decode()进行编码。以下是一个非常快速的示例:
import java.net.URLDecoder;
import java.net.URLEncoder;

/*... further code ...*/

try { 
    String someJsonString = "{\"num\":2}";
    String encoded = URLEncoder.encode(jsonString, "UTF-8");
    System.out.println(encoded);
    String decoded = URLDecoder.decode(encoded, "UTF-8");
    System.out.println(decoded);
}
catch(UnsupportedEncodingException e){
    e.printStackTrace();
}

以下是一些参考资料:

如何将JSON数据作为URL请求参数发送...

URLEncoder.encode()已弃用...

在URL参数中传递复杂对象

最后是Java文档

URLDecoder

URLEncoder


我认为这个问题没有任何“标准”解决方案,但有几种方法可以解决。看一下JSONObject、IOUtils和/或GSON。同时查看这个问题和这个问题,因为它们讨论了从URL获取潜在大型URL字符串并从中创建JSON的方法。 - rufism

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接