2017-11-06 11 views
0

JSONレスポンスから特定の文字列値をフェッチするために、次のコードを繰り返し呼び出す必要があります。JSONパスをフェッチしてパフォーマンスと読みやすさを向上させるコードをリファクタリングする

String val1 = JsonPath.with(e.getValue()).getAsJsonArray("val1/textSpans") 
       .get(0).getAsJsonObject().get("text").getAsString(); 

String val2 = JsonPath.with(e.getValue()).getAsJsonArray("val2/textSpans") 
       .get(0).getAsJsonObject().get("text").getAsString(); 

String val3 = JsonPath.with(e.getValue()).getAsJsonArray("val3/textSpans") 
       .get(0).getAsJsonObject().get("text").getAsString(); 

String val4 = JsonPath.with(e.getValue()).getAsJsonArray("val4/textSpans") 
       .get(0).getAsJsonObject().get("text").getAsString(); 

は、それは以下のようにそれをリファクタリングする理にかなってか、それはやり過ぎです:

JsonPath path = JsonPath.with(e.getValue()); 
String val1 = path.getAsJsonArray("val1/textSpans") 
        .get(0).getAsJsonObject().get("text").getAsString(); 
String val2 = path.getAsJsonArray("val2/textSpans") 
        .get(0).getAsJsonObject().get("text").getAsString(); 
String val3 = path.getAsJsonArray("val3/textSpans") 
        .get(0).getAsJsonObject().get("text").getAsString(); 
String val4 = path.getAsJsonArray("val4/textSpans") 
        .get(0).getAsJsonObject().get("text").getAsString(); 

は、それがさらにそうVAL1、VAL2、val3は、とval4がにパラメータとして渡されていることをリファクタリングすることでした。同じメソッドを返し、文字列を返しますか?

答えて

0

テストする必要があるかもしれませんが、このようなことはうまくいくはずです。これはアプリケーションの完全なコンテキストを持っていないためコンパイルされませんが、関連するコードをコピーしてテストすることができます。

public static void main(String[] args) throws Exception { 

     JsonPath path = JsonPath.with(e.getValue()); 

     List<String> values = new ArrayList<String>(); 

     for (int i = 1; i < 5; i++) { 
      values.add(getPath("val" + i, path)); 
     } 
    } 

    static String getPath(String value, JsonPath path) { 
     return path.getAsJsonArray(value + "/textSpans") 
       .get(0).getAsJsonObject().get("text").getAsString(); 
    } 
0

私はあなたが

public String getValue(JsonArray array, int index) { 

    return array.get(index).getAsJsonObject().get("text").getAsString(); 

} 


getValue(path.getAsJsonArray("val1/textSpans"), 0); 

...理解corrent場合今、あなたはあなたのURLの、コレクション内の例えばの配列を必要とします。

List<String> urls = new ArralyList()<>; 
urls.add("val1/textSpans"); 
urls.add("val2/textSpans"); 
urls.add("val3/textSpans"); 
urls.add("val4/textSpans"); 

そして今、この

StringBuilder values = new StringBuilder(); 

for (int i = 0; i < urls.size() - 1; i++) { 
    values.append(getValue(path.getAsJsonArray(urls.get(i)), 0)); 
} 
を使用
関連する問題