当我使用正则表达式时,为什么我没有得到任何匹配?

时间:2017-12-11 08:36:29

标签: android json regex

我试图了解如何在android studio中使用正则表达式。我试图从Json响应字符串中获取一些catchgroups。我知道您应该以正常的方式解析json对象,但我想弄清楚为什么我的rgex无法正常工作。

我已经尝试将json字符串粘贴到在线正则表达式检查器中,并且我能够通过使用以下内容获得我想要的所有catchgroup:

topLeftX.+\s(\d+)|topLeftY.+\s(\d+)

但是这对我在android studio中不起作用,因为我没有得到任何匹配。

这是我尝试过的测试:

JSONObject json_raw = null;

        try {
            json_raw = new JSONObject("{\n" +
                    "    \"images\": [\n" +
                    "        {\n" +
                    "            \"status\": \"Complete\",\n" +
                    "            \"width\": 1536,\n" +
                    "            \"height\": 2048,\n" +
                    "            \"file\": \"kairos-elizabeth.jpg\",\n" +
                    "            \"faces\": [\n" +
                    "                {\n" +
                    "                    \"topLeftX\": 390,\n" +
                    "                    \"topLeftY\": 706,\n" +
                    "                    \"chinTipX\": 780,\n" +
                    "                    \"rightEyeCenterX\": 587,\n" +
                    "                    \"yaw\": -3,\n" +
                    "                    \"chinTipY\": 1548,\n" +
                    "                    \"confidence\": 0.99997,\n" +
                    "                    \"height\": 780,\n" +
                    "                    \"rightEyeCenterY\": 904,\n" +
                    "                    \"width\": 781,\n" +
                    "                    \"leftEyeCenterY\": 907,\n" +
                    "                    \"leftEyeCenterX\": 955,\n" +
                    "                    \"pitch\": -17,\n" +
                    "                    \"attributes\": {\n" +
                    "                        \"lips\": \"Together\",\n" +
                    "                        \"asian\": 0.25658,\n" +
                    "                        \"gender\": {\n" +
                    "                            \"type\": \"F\"\n" +
                    "                        },\n" +
                    "                        \"age\": 26,\n" +
                    "                        \"hispanic\": 0.41825,\n" +
                    "                        \"other\": 0.11144,\n" +
                    "                        \"black\": 0.16007,\n" +
                    "                        \"white\": 0.05365,\n" +
                    "                        \"glasses\": \"None\"\n" +
                    "                    },\n" +
                    "                    \"face_id\": 1,\n" +
                    "                    \"quality\": 0.79333,\n" +
                    "                    \"roll\": -1\n" +
                    "                }\n" +
                    "            ]\n" +
                    "        }\n" +
                    "    ]\n" +
                    "}");
        } catch (JSONException e) {
            e.printStackTrace();
        }
        Pattern pattern = Pattern.compile("topLeftX.+\\s(\\d+)");
        Matcher matcher = pattern.matcher(json_raw.toString());

1 个答案:

答案 0 :(得分:0)

因此,您已经拥有一个有效的JSON对象,为了获得更好的代码,您应该使用JSON methods来获取数据。如果我错了,请纠正我,我想你想获得topLeftXtopLeftY信息。

This is the representation of your JSON

要使用JSON执行此操作,请参阅以下代码段:

JSONArray images = json_raw.getJSONArray("images");
for(int i = 0; i < images.length(); i++){
    JSONArray faces = images.getJSONArray(i);
    for(int j = 0; j < faces.length(); j++){
        JSONObject face = faces.getJSONObject(j)
        Log.d("LOG", "Top Left X: " + face.getInt("topLeftX");
        Log.d("LOG", "Top Left Y: " + face.getInt("topLeftY");
    }
}
  

请注意,我的代码未经测试,但它基于实际的API,需要存在一些catch代码(或者您可以throw全部代码)