将序列化的 JSON 对象转换回 Java
Converting serialized JSON object back in Java
我正在编写一个 Java 应用程序,它通过 REST API 向本地网络中的命名实体识别服务 (deeppavlov) 运行 发出请求。
所以我通过以下方式请求数据:
String text = "Welcome to Moscow, John";
List<String> textList = new ArrayList<String>();
textList.add(text);
JSONObject json = new JSONObject();
json.put("x", textList);
String URL = "http://localhost:5005/model";
HttpClient client = HttpClient.newBuilder()
.version(Version.HTTP_1_1)
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(URL))
.header("accept", "application/json")
.header("Content-Type", "application/json")
.POST(BodyPublishers.ofString(json.toString()))
.build();
try {
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
System.out.println(response.body());
System.out.println(response.body().getClass());
} catch (IOException | InterruptedException e) {
}
结果我得到:
[[["Welcome","to","Moscow",",","John"],["O","O","B-GPE","O","B-PERSON"]]]
class java.lang.String
它是一个字符串,我不知道如何将它转换为对象、数组、映射或列表以进行迭代。请帮忙。
这取决于您用来反序列化字符串的库。
看来您正在使用 org json 代码,因此可能的解决方案是使用 JSONTokener
:
Parses a JSON (RFC 4627) encoded string into the corresponding object
然后使用方法nextValue
:
Returns the next value from the input. Can be a JSONObject, JSONArray, String, Boolean, Integer, Long, Double or JSONObject#NULL.
代码如下
Object jsonObject = new JSONTokener(jsonAsString).nextValue();
我正在编写一个 Java 应用程序,它通过 REST API 向本地网络中的命名实体识别服务 (deeppavlov) 运行 发出请求。
所以我通过以下方式请求数据:
String text = "Welcome to Moscow, John";
List<String> textList = new ArrayList<String>();
textList.add(text);
JSONObject json = new JSONObject();
json.put("x", textList);
String URL = "http://localhost:5005/model";
HttpClient client = HttpClient.newBuilder()
.version(Version.HTTP_1_1)
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(URL))
.header("accept", "application/json")
.header("Content-Type", "application/json")
.POST(BodyPublishers.ofString(json.toString()))
.build();
try {
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
System.out.println(response.body());
System.out.println(response.body().getClass());
} catch (IOException | InterruptedException e) {
}
结果我得到:
[[["Welcome","to","Moscow",",","John"],["O","O","B-GPE","O","B-PERSON"]]] class java.lang.String
它是一个字符串,我不知道如何将它转换为对象、数组、映射或列表以进行迭代。请帮忙。
这取决于您用来反序列化字符串的库。
看来您正在使用 org json 代码,因此可能的解决方案是使用 JSONTokener
:
Parses a JSON (RFC 4627) encoded string into the corresponding object
然后使用方法nextValue
:
Returns the next value from the input. Can be a JSONObject, JSONArray, String, Boolean, Integer, Long, Double or JSONObject#NULL.
代码如下
Object jsonObject = new JSONTokener(jsonAsString).nextValue();