我正在开发一个客户端Java应用程序,它具有一些功能,需要从一些以JSON传输的Web服务中获取数据(一些是RESTful,一些不是)。没有JavaScript,没有Web浏览器,只是一个普通的JAR文件,它将使用Swing为GUI本地运行。
这不是一个新的或独特的问题;肯定有一些开源库可以通过HTTP处理JSON数据传输。我已经发现了一些将解析JSON的东西,但是我找不到任何可以处理HTTP通信来使用JSON Web服务的东西。
到目前为止,我发现Apache Axis2显然可能至少有部分解决方案,但我没有看到足够的文档知道它是否能满足我的需求,或者如何使用它。也许问题的一部分是我没有Web服务的经验,所以当我看到它时,我无法知道解决方案。我希望你们中的一些人能指出我正确的方向。例子很有用。
答案 0 :(得分:5)
如果您想要比处理URLConnection更舒适一点,请查看Resty for Java。 简单,轻巧,但仍然很新。
http://beders.github.com/Resty
以下是JSON的示例:
Resty r = new Resty();
String name = r.json("http://ws.geonames.org/postalCodeLookupJSON?"+
"postalcode=66780&country=DE").get("postalcodes[0].placeName").toString();
没有依赖关系。一个小JAR,你很高兴。
答案 1 :(得分:4)
Apache HttpClient 4.0 是业内最好的,并且中等易学。
如果您想要更轻松,可以使用HtmlUnit来模仿浏览器的行为,这样您就可以轻松获取内容(并将其解析为Html,javascript和css,您还可以在内容上执行javascript代码,这样您就可以可能会将JSON文件解析为使用网页上任何页面的JSON.parse或任何其他等效函数。
所以对于HtmlUnit,这里有一个示例代码:
WebClient wc = new WebClient(BrowserVersion.FIREFOX_3_6);
HtmlPage page = wc.getPage("http://urlhere");
page.executeJavaScript("JS code here");
但是对于您的要求可能相当重,因此强烈建议使用 HttpClient 库。 我相信你可以找到很多适用于Java的JSON库,但这里有一个适合你的json-lib
答案 2 :(得分:1)
我是使用简单的Java JSON库完成的。使用Google库..
URL url = new URL("http://www.siteconsortium.com/services/hello.php");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
JSONParser parser=new JSONParser();
Object object = parser.parse(in);
JSONArray array = (JSONArray) object;
JSONObject object2 = (JSONObject)array.get(0);
System.out.println(object2.get("hello"));
如果使用OAuth的Web服务和访问令牌,您无法使用上述示例。
答案 3 :(得分:0)
很高兴看到您的Web服务是RESTful的。 RESTful Web服务很容易开发和使用。很好......你不需要特别小心通过网络传输JSON数据......数据是否以XML格式的JSON格式嵌入到HTTP头中..以下代码片段将帮助您理解这个想法:
httpConnection = new HTTPConnectionManager(request);
HttpURLConnection httpURLConnection = httpConnection.connect();
int responseCode = httpURLConnection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
in = httpURLConnection.getInputStream();
int x;
StringBuilder stringBuilder = new StringBuilder();
while ((x = in.read()) != -1) {
stringBuilder.append((char) x);
}
XMLParser xmParser = new XMLParser();
....
....
}
在这段代码中,我从Web服务接收XML格式的数据。在将数据接收到StringBuilder
对象后,我正在解析XML。以同样的方式,您可以使用此代码调用Web服务,并可以接收您的JSON数据。您可以使用 Here 提供的javaJSON API从JSON表示法中提取数据。
希望代码会帮助你...
PS:HTTPConnectionManager
,XMLParser
和Request
(request
个对象)类不是任何标准API。它们由我自己的帐户编写,用于处理多个Web服务调用。这段代码只是为了给你我的想法。