2017-12-11 9 views
0

私はアンドロイドスタジオで正規表現を使用する方法を理解しようとしています。私はJsonの応答文字列からいくつかのキャッチグループを取得しようとしています。私はおそらくjsonオブジェクトを通常の方法で解析する必要があることを知っていますが、私のrgexが機能していない理由を理解したいと思います。正規表現を使用すると一致しないのはなぜですか?

私はオンライン正規表現チェッカーにJSON文字列をペーストしようとしていると私は同じようなものを使用して、私がしたいすべてのcatchgroupsを取得することができています:

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

しかし、それは私のようにアンドロイドのスタジオで私のために動作しません。一致するものはありません。

これは私がしようとしたテストです:

ので
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

有効なJSON文字列があります。データを取得する必要があります。より良い結果を得るためのJSONメソッド... – ariefbayu

+0

matcher 'Matcher'オブジェクトを作成しますが、それを使用していないようですか?あなたの場合、 'matcher.matches()'ではなく 'matcher.find()'をしたいとします。 –

+0

AndroidのJSONメソッドを使用してJSON文字列を処理する方法をスニペットで説明しました。それを見て、さらにいくつかのJSON処理を学んでください... – ariefbayu

答えて

0

を、あなたはすでに有効なJSONオブジェクトを持って、より良いコードのために、あなたはあなたのデータをフェッチするJSON methodsを使用する必要があります。私が間違っている場合は私を修正し、topLeftXtopLeftYの情報を得たいと思う。

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コード必要があります:

This is the representation of your JSON

はJSONを使用して、ここでいくつかのスニペットだということを行うには(または throwすべて)

+0

ありがとう、しかし、私はエラーが発生し、それはオブジェクトが配列に変換することはできませんと言います。 – Burton

+0

どの行がエラーであるか、また、まず自分のコードが何をしようとしているかを理解するために、AndroidのJSONメソッドを使用する方法を学ぶ必要があります。 – ariefbayu

関連する問題