在Java中解析JSON并按输出日期排序
这个REST查询提供了在日期创建的_。我想解析输出以获取所有日期,然后对它们进行排序。我需要解析的有问题的行如下所示在Java中解析JSON并按输出日期排序,java,rest,Java,Rest,这个REST查询提供了在日期创建的_。我想解析输出以获取所有日期,然后对它们进行排序。我需要解析的有问题的行如下所示 "created_at": "2013-01-08T20:11:48Z", 在此查询 https://api.github.com/search/repositories?q=language:Java 有没有一种有效的方法 我的密码到现在为止 public static String processRestResponse(String language){
"created_at": "2013-01-08T20:11:48Z",
在此查询
https://api.github.com/search/repositories?q=language:Java
有没有一种有效的方法
我的密码到现在为止
public static String processRestResponse(String language){
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("https://api.github.com/search/repositories?q=language:" + language);
HttpResponse response = null;
BufferedReader rd = null;
try {
response = client.execute(request);
rd = new BufferedReader
(new InputStreamReader(
response.getEntity().getContent()));
} catch (IOException e) {
e.printStackTrace();
}
String line = "";
String output = language;
try {
while ((line = rd.readLine()) != null) {
output += "\n" + line.substring(line.indexOf("\""), line.indexOf(",")) + "\n";
}
}catch (IOException e){}
return output;
}
好吧,我咬一口:
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonObject;
import javax.json.JsonStructure;
import javax.json.JsonValue;
public class StackOverflow44316515{
public static void main(final String[] args) throws Exception{
final StackOverflow44316515 example = new StackOverflow44316515();
// Get data:
final JsonObject jsonLangObjs = example.getLanguages("java");
// Copy items into a mutable array:
final JsonArray items = jsonLangObjs.getJsonArray("items");
final JsonObject[] itemsArray = items.toArray(new JsonObject[items.size()]);
// Sort the array:
Arrays.sort(itemsArray, new Comparator<JsonValue>(){
@Override
public int compare(final JsonValue o1, final JsonValue o2){
return ((JsonObject)o1).getString("created_at")
.compareTo(((JsonObject)o2).getString("created_at"));
}
});
// Re-wrap in a list API for convenience (optional):
final List<JsonObject> itemsArrayList = Arrays.asList(itemsArray);
// Print sample:
for(final JsonObject jo : itemsArrayList){
System.out.println(jo.getString("created_at") + " - " + jo.getString("full_name"));
}
}
public JsonObject getLanguages(final String language) throws Exception{
final URL url = new URL("https://api.github.com/search/repositories?q=language:"
+ URLEncoder.encode(language, "UTF-8")
+ "&per_page=10");
final HttpURLConnection huc = (HttpURLConnection)url.openConnection();
if(huc.getResponseCode() != 200){
throw new Exception("Error calling web service: "
+ huc.getResponseCode() + " - " + huc.getResponseMessage());
}
try(final InputStream is = huc.getInputStream()){
final JsonStructure json = Json.createReader(is).read();
return (JsonObject)json;
}
}
}
-幸运的是,格式化日期是按照它们的字典顺序正确排序的——因此对于这样一个简单的练习,我们甚至不需要首先将它们解析为Java数据对象之类的东西
- 另见:
Java.net
类的使用-这里不需要第三方HTTP库
请注意,此代码不会捕获它无法处理的任何异常。一个空的catch块,甚至一个只输出异常的catch块,几乎总是对任何人都没有好处。(“好的,现在怎么办?”)也就是说,你真的想让代码继续运行,就好像什么都没发生一样吗
这段代码还将每组JSON结果构建到内存中的对象模型中(JsonObjects
的JsonArray
)。虽然这里的示例最简单,但更高效的实现将使用流接口,例如JsonParser
。另见:
2010-02-08T13:20:56Z - elastic/elasticsearch
2010-09-06T21:39:43Z - square/retrofit
2012-07-23T13:42:55Z - square/okhttp
2013-01-08T20:11:48Z - ReactiveX/RxJava
2013-03-05T08:18:59Z - JakeWharton/butterknife
2013-07-08T22:52:33Z - bumptech/glide
2014-04-25T14:29:47Z - PhilJay/MPAndroidChart
2014-05-29T16:23:17Z - google/guava
2014-08-09T16:45:18Z - iluwatar/java-design-patterns
2015-04-29T23:54:16Z - square/leakcanary