import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; public class HttpJsonRequest { public static void main(String[] args) { try { URL url = new URL("https://news-at.zhihu.com/api/4/news/latest"); URLConnection connection = url.openConnection(); BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line; StringBuilder sb = new StringBuilder(); while ((line = reader.readLine()) != null) { sb.append(line); } reader.close(); String json = sb.toString(); // 解析JSON,这里以解析stories数组中第一个元素的title字段为例 int index = json.indexOf("\"title\":"); String title = json.substring(index + 9, json.indexOf(",", index)).replace("\"", ""); System.out.println(title); } catch (Exception e) { e.printStackTrace(); } } }
时间: 2024-02-15 07:31:13 浏览: 39
这段代码的特色之处是它可以通过访问指定URL获取JSON格式的数据,并对数据进行解析。具体来说,它使用了Java中的URLConnection类来建立与指定URL的连接,并通过BufferedReader类读取返回的数据。然后,它使用StringBuilder类将读取到的每一行数据都加入到一个字符串中,形成完整的JSON字符串。最后,它使用Java的字符串处理函数对JSON数据进行解析,提取出stories数组中第一个元素的title字段,并打印输出。这样,这段代码可以方便地实现对于API接口的调用和数据的获取。
相关问题
解析以下代码:import java.net.*; import java.io.*; public class URLConnectionReader { public static void main (String args[]) { try{ //URL gis = new URL("http://www.ztenc.com.cn/test.htm"); URL gis = new URL("file:/c:/a.txt"); URLConnection uc = gis.openConnection(); BufferedReader in = new BufferedReader( new InputStreamReader( uc.getInputStream() ) ); String line; while( (line = in.readLine()) != null ) { System.out.println(line); } in.close(); }catch(Exception e){ System.out.println(e); } } }
这段代码是用于从指定的URL或文件中读取内容并将其打印到控制台。与之前的代码类似,这里也使用了`java.net.URL`类和`java.io.BufferedReader`类来实现。
首先,通过创建一个`URL`对象来指定要读取的资源的位置。在这个例子中,有两个URL对象,一个是注释掉的`http://www.ztenc.com.cn/test.htm`,另一个是`file:/c:/a.txt`。您可以根据需要选择使用其中一个URL。
然后,通过调用`openConnection()`方法获取到一个`URLConnection`对象,它表示与URL之间的连接。
接下来,创建一个`BufferedReader`对象来读取URL或文件的内容。通过调用`getInputStream()`方法获取URLConnection的输入流,并将其传递给`InputStreamReader`构造函数进行处理。
然后,使用`readLine()`方法逐行读取内容,并将每行内容打印到控制台。
在整个代码块的末尾,使用`close()`方法关闭输入流,并捕获任何可能发生的异常并进行处理。
请注意,在运行代码之前,请确保URL或文件的位置是有效的,并且您具有正确的访问权限。
如果您有任何进一步的问题,请随时提问!
package sy; import java.io.BufferedReader; import java.net.*; import org.json.*; import java.io.*; public class POIService { private static String urlString="https://restapi.amap.com/v3/place/text?"; private String REQUEST_URL; public String getREQUEST_URL() { return REQUEST_URL; } public void setREQUEST_URL(String REQUEST_URL) { //��һ���иĶ� this.REQUEST_URL=REQUEST_URL; } public POIService (String params) { this.REQUEST_URL=urlString+params; } public String getPOIinfo() { StringBuffer resultBuffer=new StringBuffer(); try { URL url=new URL(this.REQUEST_URL); URLConnection connection=url.openConnection(); BufferedReader bReader=new BufferedReader(new InputStreamReader(connection.getInputStream(),"UTF-8")); String strlineString=null; while ((strlineString=bReader.readLine())!=null) { resultBuffer.append(strlineString); } bReader.close(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } //System.out.print(resultBuffer.toString()); return resultBuffer.toString(); } public int parseJson(String resultString,int currentPage,int offset) throws Exception{ JSONObject jsonResult=new JSONObject(resultString); int status=jsonResult.getInt("status"); if (status==0) { System.out.print("ʧ��"); return -1; } else { JSONArray poiArr=jsonResult.getJSONArray("pois"); int totalcount = jsonResult.getInt("count"); System.out.print("����"+totalcount+"���"); for (int i = 0; i < poiArr.length(); i++) { JSONObject poiObj=poiArr.getJSONObject(i); String idString=poiObj.getString("idString"); String nameString=poiObj.getString("nameString"); String typeString=poiObj.getString("typeString"); String addressString=poiObj.getString("addressString"); String locationString=poiObj.getString("locationString"); String citynameString=poiObj.getString("citynameString"); String adnameString=poiObj.getString("adnameString"); POI poi=new POI(idString,nameString,typeString,addressString,locationString,citynameString,adnameString); System.out.println(((currentPage-1)*offset+i+1)+"|"+poi.getIdString()+"|"+poi.getNameString()+"|"+poi.getTypeString()+"|"+poi.getAddressString()+"|"+poi.getLocationString()+"|"+poi.getCitynameString()+"|"+poi.getAdnameString()); } System.out.println("------------"); return poiArr.length(); }请帮我检查这份代码的问题
这份代码的问题可能有:
1. 在构造方法中,参数params没有进行空值判断,可能会导致NullPointerException异常;
2. 在getPOIinfo方法中,如果连接失败,异常处理只是简单地打印了错误信息,没有进行更加详细的处理;
3. 在parseJson方法中,如果status为0,虽然输出了"失败",但并没有进行更加详细的处理,例如抛出自定义异常等;
4. 在parseJson方法中,如果jsonResult中没有"pois"字段,会导致JSONException异常,但没有进行异常处理。
阅读全文