尝试检索 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);
    ...
}

Baeldung unirest guide

中查看更多内容

如果需要在 StringJsonNode 之间进行转换,请使用 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();

我希望这对其他人也有帮助:)