Java 如何从返回HTML的URL返回JSON响应
首先,一些背景:- 我想解决最近面试官问的一个问题。我必须编写代码并使用下面的URL返回JSON响应- 这就是我所做的:- 1) 我创建了一个webclient并发出HTTPURL请求以获取HTTP响应Java 如何从返回HTML的URL返回JSON响应,java,html,json,rest,craigslist,Java,Html,Json,Rest,Craigslist,首先,一些背景:- 我想解决最近面试官问的一个问题。我必须编写代码并使用下面的URL返回JSON响应- 这就是我所做的:- 1) 我创建了一个webclient并发出HTTPURL请求以获取HTTP响应 public static JSONArray getSearchResults(String arg) { JSONArray jsonArray = null; try { QueryString qs = new QueryString("query",
public static JSONArray getSearchResults(String arg) {
JSONArray jsonArray = null;
try {
QueryString qs = new QueryString("query", arg);
URL url = new URL("https://toronto.craigslist.ca/search?"+qs);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/text");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
String readAPIResponse = " ";
StringBuilder output = new StringBuilder();
while ((readAPIResponse = br.readLine()) != null) {
output.append(readAPIResponse);
}
jsonArray = convertToJson(output);
System.out.println(" JSON response : "+jsonArray.toString(2));
conn.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return jsonArray;
}
2) 下面是我将响应转换为JSON的函数:-
public static JSONArray convertToJson(StringBuilder response) {
JSONArray jsonArr = new JSONArray();
if (response != null) {
try {
Document document = Jsoup.parse(response.toString());
Elements resultRows = document.getElementsByClass("result-row");
JSONObject jsonObj;
for (int i = 0; i < resultRows.size(); i++) {
jsonObj = new JSONObject();
Element e = resultRows.get(i);
Elements resultsDate = e.getElementsByClass("result-date");
Elements resultsTitle = e.getElementsByClass("result-title hdrlnk");
String key1 = "date";
String value1 = resultsDate.get(0).text();
jsonObj.put(key1, value1);
String key2 = "title";
String value2 = resultsTitle.get(0).text();
jsonObj.put(key2, value2);
jsonArr.put(i, jsonObj);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
return jsonArr;
}
公共静态JSONArray convertToJson(StringBuilder响应){
JSONArray jsonArr=新的JSONArray();
if(响应!=null){
试一试{
documentdocument=Jsoup.parse(response.toString());
Elements resultRows=document.getElementsByClass(“结果行”);
JSONObject jsonObj;
对于(int i=0;i
我收到的回复是整个HTML页面(我使用邮递员发出请求)。因为我只有几个小时来解决这个问题,而且不知道如何解析整个HTML,所以我最终使用了第三方库JSoup。我不是百分之百的高兴,但最终没有其他选择
我没有收到他们的回复,我很好奇这是否是最糟糕的方法,如果是,还有什么更好的选择?他们没有提到我可以使用什么技术。但是,由于我面试的技能集涉及Java/J2EE,我想用Java实现这一点(但不使用NodeJS)
谢谢 如果您只需要一个XML解析器,它显然是HTML的基础,它内置于JRE核心API中。
即使在SE版本中,也存在需要解析的包:
import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.*;
看看这些类,它们是解析或创建XML/HTML文件最重要的
DocumentBuilderFactory
DocumentBuilder
Document
这里是一个简单的HTML示例
String text = "<html><head>HEAD</head><body>BODY</body>";
ByteArrayInputStream input = new ByteArrayInputStream(text.getBytes("UTF-8"));
Document doc = builder.parse(input);
String text=“HEADBODY”;
ByteArrayInputStream输入=新的ByteArrayInputStream(text.getBytes(“UTF-8”);
文档doc=builder.parse(输入);
如果不确切了解面试官的期望,这不是一个可以回答的问题。“如何将HTML转换为JSON”是一个很好的例子。显然,这不是面试官要问的问题。如果您明确告诉我们:“我们应该请求一个HTML页面,并将其废弃以获取X数据,然后以JSON格式返回”,这将是一个合适的问题,但不清楚面试官的问题是什么。请澄清您的问题!你到底知道什么?谢谢@PaulSamsotha指出这一点。你完全正确!我的错。是的,问题应该是“我们应该请求一个HTML页面,并将其废弃以获取X数据,然后以JSON格式返回”。你有什么建议吗?我也会尝试下面的答案,但我也希望得到你的推荐@尼顿,正如采访者所说,我只知道——“CraigslistURL需要直接访问&它本身不会返回JSON”,希望它能回答你的问题?