首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 通過 HttpURLConnection 獲取 PHP 返回的 JSON 數據完整示例

     編輯:Java 相關知識

場景概覽

Java 客戶端調用 PHP 接口,接口返回 JSON 數組,客戶端解析展示。示例環境:PHP 運行在 https://127.0.0.6/?c=json。

PHP 接口代碼(index.php)

<?php
if (isset($_REQUEST['c']) && $_REQUEST['c'] === 'json') {
    $arr = [
        ['id' => 1, 'name' => 'zhdc'],
        ['id' => 2, 'name' => '小朱']
    ];
    die(json_encode($arr)); // 輸出: [{"id":1,"name":"zhdc"},{"id":2,"name":"\u5c0f\u6731"}]
}

Java 客戶端完整代碼

import java.io.*;
import java.net.*;

public class JsonHttpClient {
    public static void main(String[] args) {
        String urlStr = "https://127.0.0.6/?c=json";
        HttpURLConnection conn = null;
        BufferedReader reader = null;
        try {
            URL url = new URL(urlStr);
            conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(5000);
            conn.setReadTimeout(5000);
            conn.setRequestProperty("Accept", "application/json");

            int responseCode = conn.getResponseCode();
            if (responseCode != HttpURLConnection.HTTP_OK) {
                throw new IOException("HTTP error code: " + responseCode);
            }

            reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
            StringBuilder json = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                json.append(line);
            }
            System.out.println("原始 JSON: " + json);

            // 此處可接入 Jackson/Gson 解析為對象
            // List users = new ObjectMapper().readValue(json.toString(), new TypeReference<>() {});
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (reader != null) try { reader.close(); } catch (IOException ignored) {}
            if (conn != null) conn.disconnect();
        }
    }
}

關鍵點說明

  • 編碼統一: 輸入流讀取時指定 UTF-8,避免中文亂碼(PHP json_encode 默認輸出 Unicode 轉義)。
  • 超時設置: 必須設置連接與讀取超時,防止線程無限阻塞。
  • 資源釋放: finally 塊中關閉流與斷開連接。
  • 異常處理: 捕獲 MalformedURLException、IOException 等。

進階:使用 Jackson 解析為 Java 對象

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

// 解析
ObjectMapper mapper = new ObjectMapper();
List<User> users = mapper.readValue(json.toString(),
    mapper.getTypeFactory().constructCollectionType(List.class, User.class));
for (User u : users) System.out.println(u.getId() + " - " + u.getName());

// 實體類
class User {
    private int id;
    private String name;
    // getter/setter 省略
}

常見問題排查

現象可能原因解決
返回 HTML 錯誤頁PHP 入口文件路徑錯誤或語法錯誤瀏覽器直接訪問 URL 驗證
中文顯示 \uXXXXjson_encode 未設置 JSON_UNESCAPED_UNICODEPHP 使用 json_encode($arr, JSON_UNESCAPED_UNICODE)
連接超時防火牆/端口未開放/IP 錯誤telnet/ curl 測試連通性
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved