尝试检索 json 节点时出现 ClassCastException
ClassCastException when trying to retrieve json node
当我尝试将 json 响应存储在数据存储中,然后尝试从响应中检索特定的 json 节点时,我收到以下错误:
Error Message: java.lang.ClassCastException: java.lang.String cannot be cast to com.mashape.unirest.http.JsonNode
我可以看到它正在按我的要求检索响应,但是在检索下一行中的节点时出错。
public void hitEndpoint(String endpoint) {
DataStore dataStore = DataStoreFactory.getScenarioDataStore();
HttpResponse<String> httpResponse;
String url = "xxx/xxx";
try {
httpResponse = Unirest.post(url)
.asString();
dataStore.put("httpResponse", httpResponse);
...
}
public void RetrieveExampleNode(String endpoint){
DataStore dataStore = DataStoreFactory.getScenarioDataStore();
HttpResponse<JsonNode> httpResponse = (HttpResponse<JsonNode>) dataStore.get("httpResponse");
String getExampleNode = httpResponse.getBody().getObject().getJSONArray("test").getJSONObject(0).get("example").toString();
//error in the above line
}
JSON 正在尝试解析并由上面代码中的 httpResponse 当前检索:
{"test": [{"example": "2019-09-18T04:32:12Z"}, {"type": "application/json","other": {"name": Test Tester}}]}
ClassCastException 被抛出是因为在 hitEndpoint
方法中您将 HttpResponse<String>
存储到数据存储,因此在 RetrieveExampleNode
方法中将其转换为 HttpResponse<JsonNode>
是错误的!
相反,您首先应该有 HttpResponse<JsonNode>
:
public void hitEndpoint(String endpoint) {
DataStore dataStore = DataStoreFactory.getScenarioDataStore();
HttpResponse<JsonNode> httpResponse;
String url = "xxx/xxx"t;
try {
httpResponse = Unirest.post(url)
.asJson();
dataStore.put("httpResponse", httpResponse);
...
}
中查看更多内容
如果需要在 String
和 JsonNode
之间进行转换,请使用 toString()
方法和 JsonNode(String)
构造函数。
请检查 HttpResponse class 包并转换 json 对象而不是数组,然后获取 json 对象并在您的响应中获取数组:
com.mashape.unirest.http.HttpResponse<JsonNode> response = Unirest.get("https://shopName.myshopify.com/admin/api/2019-04/orders.json").basicAuth("Api-Key", "Password").asJson();
JSONObject myJSON = response.getBody().getObject();
我希望这对其他人也有帮助:)
当我尝试将 json 响应存储在数据存储中,然后尝试从响应中检索特定的 json 节点时,我收到以下错误:
Error Message: java.lang.ClassCastException: java.lang.String cannot be cast to com.mashape.unirest.http.JsonNode
我可以看到它正在按我的要求检索响应,但是在检索下一行中的节点时出错。
public void hitEndpoint(String endpoint) {
DataStore dataStore = DataStoreFactory.getScenarioDataStore();
HttpResponse<String> httpResponse;
String url = "xxx/xxx";
try {
httpResponse = Unirest.post(url)
.asString();
dataStore.put("httpResponse", httpResponse);
...
}
public void RetrieveExampleNode(String endpoint){
DataStore dataStore = DataStoreFactory.getScenarioDataStore();
HttpResponse<JsonNode> httpResponse = (HttpResponse<JsonNode>) dataStore.get("httpResponse");
String getExampleNode = httpResponse.getBody().getObject().getJSONArray("test").getJSONObject(0).get("example").toString();
//error in the above line
}
JSON 正在尝试解析并由上面代码中的 httpResponse 当前检索:
{"test": [{"example": "2019-09-18T04:32:12Z"}, {"type": "application/json","other": {"name": Test Tester}}]}
ClassCastException 被抛出是因为在 hitEndpoint
方法中您将 HttpResponse<String>
存储到数据存储,因此在 RetrieveExampleNode
方法中将其转换为 HttpResponse<JsonNode>
是错误的!
相反,您首先应该有 HttpResponse<JsonNode>
:
public void hitEndpoint(String endpoint) {
DataStore dataStore = DataStoreFactory.getScenarioDataStore();
HttpResponse<JsonNode> httpResponse;
String url = "xxx/xxx"t;
try {
httpResponse = Unirest.post(url)
.asJson();
dataStore.put("httpResponse", httpResponse);
...
}
中查看更多内容
如果需要在 String
和 JsonNode
之间进行转换,请使用 toString()
方法和 JsonNode(String)
构造函数。
请检查 HttpResponse class 包并转换 json 对象而不是数组,然后获取 json 对象并在您的响应中获取数组:
com.mashape.unirest.http.HttpResponse<JsonNode> response = Unirest.get("https://shopName.myshopify.com/admin/api/2019-04/orders.json").basicAuth("Api-Key", "Password").asJson();
JSONObject myJSON = response.getBody().getObject();
我希望这对其他人也有帮助:)