我重复调用以下代码以从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作为参数传递给同一个方法,并返回一个String?
答案 0 :(得分: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();
}
答案 1 :(得分:0)
如果我理解你......
prog.cc: In instantiation of 'void doSmth(T) [with T = int]':
prog.cc:17:13: required from here
prog.cc:8:5: error: 'int' is not a class, struct, or union type
if constexpr (requires { typename T::Bar; })
^~
现在你需要一个你的网址数组,例如在集合中。
public String getValue(JsonArray array, int index) {
return array.get(index).getAsJsonObject().get("text").getAsString();
}
getValue(path.getAsJsonArray("val1/textSpans"), 0);
现在使用此
List<String> urls = new ArralyList()<>;
urls.add("val1/textSpans");
urls.add("val2/textSpans");
urls.add("val3/textSpans");
urls.add("val4/textSpans");