![](/img/trans.png)
[英]Getting the JSON string from a Twitter search result into Java to be parsed
[英]Outputting parsed JSON results from Google Custom Search in Java
我正在尝试从Java命令行中的Google自定义搜索输出一些结果(标题,URL)以进行测试,但是我一直收到java.io.EOFException错误。 编译器列出了有问题的行,但是即使花了数小时来寻找答案,我也无法弄清楚要更改的内容。 我从Stack Overflow上现有的问题中提取了大部分代码。 任何帮助表示赞赏。
package google.api.search;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import com.google.gson.Gson;
class GSearch {
public static void main(String args[]) throws IOException {
String key = ""; //replace with API key
String qry = ""; // search key word
String cx = ""; //replace with cx
URL url = new URL ("https://www.googleapis.com/customsearch/v1?key=" +key+ "&cx=" +cx+ "&q=" +qry+ "&alt=json");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept","application/json");
BufferedReader br = new BufferedReader(new InputStreamReader ( ( conn.getInputStream() ) ) );
String output;
{while ((output = br.readLine()) != null){
GResults results = new Gson().fromJson(output, GResults.class);
System.out.println(results);
}
conn.disconnect();
}
}
}
GResults类:
public class GResults {
String title;
String link;
public GResults(String title, String link) {
this.title = title;
this.link = link;
}
public String getTitle(){
return title;
}
public String getLink(){
return link;
}
public void setTitle(String title){
this.title = title;
}
public void setLink(String link){
this.link = link;
}
public String toString(){
return ("Title:%s, Link:%s", title, link);
}
}
错误行:
GResults results = new Gson().fromJson(output, GResults.class);
错误讯息:
Exception in thread "main" com.google.gson.JsonSyntaxException: java.io.EOFException: End of input at line 1 column 2
at com.google.gson.Gson.fromJson(Gson.java:813)
at com.google.gson.Gson.fromJson(Gson.java:768)
at com.google.gson.Gson.fromJson(Gson.java:717)
at com.google.gson.Gson.fromJson(Gson.java:689)
at google.api.search.GSearch.main(GSearch.java:26)
Caused by: java.io.EOFException: End of input at line 1 column 2
at com.google.gson.stream.JsonReader.nextNonWhitespace(JsonReader.java:1377)
at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:483)
at com.google.gson.stream.JsonReader.hasNext(JsonReader.java:403)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:166)
at com.google.gson.Gson.fromJson(Gson.java:803)
... 4 more
我想我在注意到之前大约阅读了20次,这是正确的代码
final StringBuilder builder = new StringBuilder(50);
String output;
while ((output = br.readLine()) != null) {
builder.append(output);
}
final GResults results = new Gson().fromJson(builder.toString(), GResults.class);
Gson抛出了适当的异常,因为您正在逐行阅读并将该行交给gson进行反序列化。 例如,第一行是{或[或“ message”:{,并且这不是有效的json JsonSyntax。
请享用 :)
经过原始的JSON输出后,我终于找出了主要缺陷。 Google的JSON通过[]
符号返回了一个“项目” 数组 ,因此在GResults类中添加了一个List之后:
import java.util.List;
public class GResults {
public String link;
public List<GResults> items;
public String getLink(){
return link;
}
public List<GResults> getItems(){
return items;
}
public void setLink(String link){
this.link = link;
}
public void setGroups(List<GResults> items){
this.items = items;
}
public void getThing (int i){
System.out.println(items.get(i));
}
public String toString(){
return String.format("%s", link);
}
}
我可以在主GSearch类中使用以下命令返回一系列链接:
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept","application/json");
BufferedReader br = new BufferedReader(new InputStreamReader ( ( conn.getInputStream() ) ) );
GResults results = new Gson().fromJson(br, GResults.class);
for (int i=0; i<10; i++)
results.getThing(i);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.