Java Substring - 提取下一个引号

时间:2016-01-30 19:56:40

标签: java regex string substring indexof

事务响应(字符串)如下所示。

{
  "errorId": "15eabcd5-30b3-479b-ae03-67bb351c07e6-00000092",
  "errors": [
    {
      "code": "20000000",
      "propertyName": "directDebitPaymentMethodSpecificInput.bankAccountBban.accountNumber",
      "message": "PARAMETER_NOT_FOUND_IN_REQUEST"
    }
  ]
}

我需要将代码解压缩为20000000,并将消息解压缩为PARAMETER_NOT_FOUND_IN_REQUEST。

我使用下面的代码片段,当代码长度为6个字符长时可以使用。

代码段:

code = response2.getResponseBody().substring(response2.getResponseBody().indexOf("code")+9, 97).trim();

响应

{
  "errorId": "1105db54-9c91-4a97-baa7-3c4182458047",
  "errors": [ {
    "code": "410110",
    "requestId": "3927859",
    "message": "UNKNOWN ORDER OR NOT PENDING"
  } ]
}

请告知如何获取代码和消息后包含的文本,而不管下次出现的引号中包含的文本长度。

编辑 -

我知道这是一个Json响应,因此我需要解析它。 我使用下面的代码片段

JSONObject obj = new JSONObject(response2.getResponseBody());
String code = obj.getJSONObject("errors").getString("code");

然而,最终会出现以下异常

org.json.JSONException: JSONObject["errors"] not found.

提前致谢

2 个答案:

答案 0 :(得分:1)

该回复采用JSON格式。您可能希望使用JSON解析器而不是使用子字符串,以便您可以将响应作为结构化数据进行交互,而不仅仅是作为字符串。

您可以在此处找到有关JSON格式的其他信息:http://www.json.org/

两个最常见的JSON解析库(至少根据我的经验)是:

此外,关于JSON解析的SO问题(How to parse JSON in Java)还有其他可能有用的答案。

答案 1 :(得分:0)

感谢大家的指导。 下面的代码片段实现了我想要的东西。发布给他人的利益。

JSONObject obj = null;
            try {
                obj = new JSONObject(response2.getResponseBody());
            } catch (JSONException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            try {
                List<String> list = new ArrayList<String>();
                for(int i = 0; i < obj.getJSONArray("errors").length(); i++){
                    list.add(obj.getJSONArray("errors").getJSONObject(i).getString("code"));
                    list.add(obj.getJSONArray("errors").getJSONObject(i).getString("message"));
                }
                code = list.get(0); //gives me 20000000
                description = list.get(1); //gives me PARAMETER_NOT_FOUND_IN_REQUEST