簡體   English   中英

為什么JsonParser使用com.google.gson API在返回值中使用雙引號引起來

[英]Why JsonParser gives double quotes in the return value, using com.google.gson API

我目前正在使用com.google.gson api(使用gson-2.8.5版本)的JsonObject和JsonParser來解析和讀取輸入JSON形式的值。

我有JSON文件,例如,smaple "resultCode":"SUCCESS",當我嘗試從json讀取相同的值時,結果為""SUCCESS""

我正在讀取的每個值都帶有雙“”,但不確定為什么嗎? 您可以參考我的調試屏幕的以下屏幕。

我是Json和解析器的新手,這是默認行為嗎?

我期望"SUCCESS""S""00000000"不像我在下圖中突出顯示的""SUCCESS""""S""""00000000""一樣。

請分享任何想法,我們如何獲得不含“””雙引號字符串的字符串的絕對值,這會導致我的字符串比較失敗。

在此處輸入圖片說明

String response_result = "{\"response\": {\"head\": {\"function\": \"acquiring.order.create\",\"version\": \"2.0\",\"clientId\": \"201810300000\",\"reqMsgId\": \"56805892035\",\"respTime\": \"2019-09-13T13:18:08+08:00\"},\"body\": {\"resultInfo\": {\"resultCode\": \"SUCCESS\",\"resultCodeId\": \"00000000\",\"resultStatus\": S,\"resultMsg\": \"SUCCESS\"},\"acquirementId\": \"2018080834569894848930\",\"merchantTransId\": \"5683668701112717398\",\"checkoutUrl\": \"http://localhost:8081/crm/operator/operator-search-init.action\"}},\"signature\":\"d+TUYLvt1a491R1e6aO8i9VwXWzVhfNgnhD0Du74f4RgBQ==\"}";
        HttpInvoker.Result result = i.new Result(200, response_result);
    JsonObject jo =  new JsonParser().parse(response_result).getAsJsonObject();

    String resultCode = jo.get("response").getAsJsonObject().get("body").getAsJsonObject().get("resultInfo").getAsJsonObject().get("resultCode").toString();
    String resultCodeId = jo.get("response").getAsJsonObject().get("body").getAsJsonObject().get("resultInfo").getAsJsonObject().get("resultCodeId").toString();
    String resultStatus = jo.get("response").getAsJsonObject().get("body").getAsJsonObject().get("resultInfo").getAsJsonObject().get("resultStatus").toString();
    String checkoutUrl = jo.get("response").getAsJsonObject().get("body").getAsJsonObject().get("checkoutUrl").toString();

    if ( RESULT_CODE_GCASH_SUCCESS.equals(resultCode)
            && RESULT_STATUS_SUCCESS.equals(resultStatus)
            && StringUtils.isNotEmpty(checkoutUrl)) {

        log.error("Testing ".concat(resultCode).concat(resultStatus).concat(checkoutUrl));
    }
    log.error("Testing ".concat(resultCode).concat(resultStatus).concat(checkoutUrl));
    }

這是我輸入的JSON

{ 
   "response":{ 
      "head":{ 
         "function":"acquiring.order.create",
         "version":"2.0",
         "clientId":"201810300000",
         "reqMsgId":"56805892035",
         "respTime":"2019-09-13T13:18:08+08:00"
      },
      "body":{ 
         "resultInfo":{ 
            "resultCode":"SUCCESS",
            "resultCodeId":"00000000",
            "resultStatus":"S",
            "resultMsg":"SUCCESS"
         },
         "acquirementId":"2018080834569894848930",
         "merchantTransId":"5683668701112717398",
         "checkoutUrl":"http://localhost:8081/crm/operator/operator-search-init.action"
      }
   },
   "signature":"d+TUYLvtI38YL2hresd98Ixu1BXccvvh1IQMiHuMXUEeW/N5exUsW491R1e6aO8i9VwXWzVhfNgnhD0Du74f4RgBQ=="
}

JsonParser將您的json解析為JsonElement結構。 由於使用JsonElement toString方法, JsonElement您看到的行為是正常的。 要實現您的目標,只需使用JsonElement::getAsString方法:

String resultCode = jo.get("response").getAsJsonObject().get("body").getAsJsonObject().get("resultInfo").getAsJsonObject().get("resultCode").getAsString();

它給出了SUCCESS而不是"SUCCESS"

請注意, JsonElement是一個抽象類,擴展該類的類將覆蓋那些幫助程序的getAs...方法。 在您的情況下,將調用JsonPrimitive::getAsString

也可以為json創建一個POJO類,並使用Gson::fromJson將json解析為POJO類的對象。

使用@Michalk的輸入:我了解讀取JSON數據的簡單方法是使用Gson :: fromJson並為json創建POJO類。

我已經使用此鏈接生成了提供我的示例輸入JSON的POJO類,現在我有了名為:CreateOrderJSONResponse的POJO類。

Gson::fromJson

樣品:

Gson gson = new Gson();
CreateOrderJSONResponse responseJson = gson.fromJson(inputJSON, CreateOrderJSONResponse.class);

Accessubg數據:

    String resultCodeText =   responseJson.getResponse().getBody().getResultInfo().getResultCode();
    String resultCodeId =     responseJson.getResponse().getBody().getResultInfo().getResultCodeId();
    String resultStatus =     responseJson.getResponse().getBody().getResultInfo().getResultStatus();
    String checkoutUrl =      responseJson.getResponse().getBody().getCheckoutUrl();

上面的Gson::fromJson示例運行流暢,與使用以下示例代碼直接訪問文件相比,它看上去很整潔:

 JsonObject jo = parser.parse(inputJSON).getAsJsonObject();

 String resultCodeText = jo.get("response").getAsJsonObject().get("body").getAsJsonObject().get("resultInfo").getAsJsonObject().getAsJsonPrimitive("resultCode").getAsString();
 String resultCodeId = jo.get("response").getAsJsonObject().get("body").getAsJsonObject().get("resultInfo").getAsJsonObject().getAsJsonPrimitive("resultCodeId").getAsString();
 String resultStatus = jo.get("response").getAsJsonObject().get("body").getAsJsonObject().get("resultInfo").getAsJsonObject().getAsJsonPrimitive("resultStatus").getAsString();
 String checkoutUrl = jo.get("response").getAsJsonObject().get("body").getAsJsonObject().getAsJsonPrimitive("checkoutUrl").getAsString();

注意:我已經找到了JSON或JAVA,SCALA,POJO生成器工具的此鏈接 ,因為GitHub訪問可以在此處訪問

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM