解析 Java getResponseBodyAsStream 中 JSONP 数据的取值
在 Java 中,我们通常使用 HttpURLConnection 来发送 HTTP 请求并获取响应数据。当响应数据为 JSONP 格式时,我们需要进行特殊处理才能正确解析数据并提取所需的值。
JSONP 数据格式
JSONP 是 JSON with Padding 的缩写,它是一种跨域数据传输的方式。在 JSONP 中,服务器返回的数据会被包裹在一个回调函数中,例如:
callbackFunction({
"name": "John Doe",
"age": 30
});
在这个示例中,服务器返回的数据被包裹在 callbackFunction()
函数中。
解析 JSONP 数据
要解析 JSONP 数据,我们需要先读取响应流并将其转换成字符串,然后提取回调函数中的 JSON 数据部分。以下是一个简单的示例代码:
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class JsonpParser {
public static void main(String[] args) {
try {
URL url = new URL("
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
InputStream inputStream = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
// 提取 JSON 数据
String jsonpResponse = response.toString();
String jsonData = jsonpResponse.substring(jsonpResponse.indexOf("(") + 1, jsonpResponse.lastIndexOf(")"));
System.out.println(jsonData);
} catch (Exception e) {
e.printStackTrace();
}
}
}
在上面的示例中,我们首先获取 HTTP 响应流并将其转换成字符串 jsonpResponse
。然后,我们利用 substring
方法提取回调函数中的 JSON 数据部分,并将其存储在 jsonData
中。
取值
一旦我们提取出了 JSON 数据部分,就可以使用 JSON 解析库(如 Jackson、Gson 等)来解析数据并取值。以下是一个简单的示例:
import com.google.gson.Gson;
public class JsonParser {
public static void main(String[] args) {
String jsonData = "{\"name\": \"John Doe\", \"age\": 30}";
Gson gson = new Gson();
Person person = gson.fromJson(jsonData, Person.class);
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
}
static class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
}
在这个示例中,我们使用 Gson 库来解析 JSON 数据,并将其转换为 Person 对象。然后,我们可以通过 Person 对象的 getter 方法来获取相应的属性值。
总结
通过以上步骤,我们可以成功解析 Java 中 getResponseBodyAsStream 返回的 JSONP 数据,并取出所需的值。记得在实际应用中处理异常情况,以确保代码的稳定性和可靠性。希望本文对你有所帮助!