我试图了解如何在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());
答案 0 :(得分:0)
因此,您已经拥有一个有效的JSON对象,为了获得更好的代码,您应该使用JSON methods来获取数据。如果我错了,请纠正我,我想你想获得topLeftX
和topLeftY
信息。
要使用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
全部代码)