如何将指定URL的HTML内容转为String并生成JSON文件?
解决从指定URL获取响应并保存为JSON文件的问题
看起来你想要实现的是:从https://blablabla.eu/admin/autolog?format=json这个URL获取返回的JSON内容(注意你的URL参数里已经指定了format=json,所以返回的应该是JSON格式字符串,而非HTML),先将其转为String变量,再保存为本地JSON文件。你之前直接把URL对象转成字符串的做法确实不对,因为那只是输出URL本身,并没有发起网络请求获取服务器返回的响应内容。
下面是针对Android环境的完整解决方案,结合你的代码片段补充完善:
步骤1:添加必要权限
首先在AndroidManifest.xml中添加网络权限:
<uses-permission android:name="android.permission.INTERNET"/>
步骤2:发起网络请求获取响应字符串
因为Android不允许在主线程发起网络请求,这里我们用AsyncTask(如果是较新版本的Android,也可以用Coroutines或者OkHttp等库)来实现异步请求:
import android.os.AsyncTask; import android.util.Log; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class FetchJsonTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... urls) { String urlString = urls[0]; StringBuilder response = new StringBuilder(); try { URL url = new URL(urlString); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); // 读取服务器响应 BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); conn.disconnect(); } catch (Exception e) { Log.e("JSON_FETCH_ERROR", "获取响应失败: " + e.getMessage()); return null; } return response.toString(); } @Override protected void onPostExecute(String jsonString) { if (jsonString != null) { Log.i("JSON_RESPONSE", "获取到的JSON内容: " + jsonString); // 在这里调用保存JSON到文件的方法 saveJsonToFile(jsonString); } } // 将JSON字符串保存为本地文件的方法 private void saveJsonToFile(String jsonString) { // 示例:保存到应用内部存储 try { String fileName = "autolog.json"; // 打开输出流 java.io.FileOutputStream outputStream = getApplicationContext().openFileOutput(fileName, android.content.Context.MODE_PRIVATE); outputStream.write(jsonString.getBytes()); outputStream.close(); Log.i("JSON_SAVE_SUCCESS", "JSON文件已保存: " + getApplicationContext().getFilesDir() + "/" + fileName); } catch (Exception e) { Log.e("JSON_SAVE_ERROR", "保存文件失败: " + e.getMessage()); } } }
步骤3:调用任务执行请求
在你的Activity或者Fragment中,判断URL后启动这个异步任务:
String url = "https://blablabla.eu/admin/autolog?format=json"; Log.i("Apple", "" + url); // 注意去掉URL前后的空格,你的代码里startsWith的参数有多余空格 if (url.startsWith("https://intra.epitech.eu/admin/autolog?format=json")) { Log.i("Chcolate", "YES"); // 启动异步任务获取JSON new FetchJsonTask().execute(url); }
关键说明
- 你之前的代码只创建了
URL对象,但没有发起实际的HTTP请求去读取服务器响应,所以需要通过HttpURLConnection来打开连接、读取输入流。 - 因为URL参数指定了
format=json,所以服务器返回的应该是标准JSON字符串,不需要将HTML转JSON(如果实际返回是HTML,那可能是请求有问题,比如权限验证失败)。 - 网络操作必须在异步线程执行,否则会抛出
NetworkOnMainThreadException。
内容的提问来源于stack exchange,提问作者Folamie
相关产品推荐
相关产品推荐

