如果有分隔符,我需要将JSONPath路径分为3部分。分隔符将指示数组。
例如:
$。Colors [*]。name
需要成为:
Bitmap bitmap = ((BitmapDrawable) ((ImageView) nextChild).getDrawable()).getBitmap();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 60, baos);
byte[] imginbyte = baos.toByteArray();
value = Base64.encodeToString(imginbyte, Base64.DEFAULT);
如果有多个:
喜欢:
Before: "$.Colors"
Separator: "[*]"
After: ".name"
首先需要采取以下步骤:
$.Colors[*].Color[*].name
我也希望它可以在过滤器上工作
Before: "$.Colors"
Separator: "[*]"
After: ".Color[*].name"
它将在该过滤器值上分割。
$.Colors[?(@.type == 'Primary')].Color[*].name
到目前为止,我的尝试没有结果:
Before: "$.Colors"
Separator: "[?(@.type == 'Primary')]"
After: ".Color[*].name"
任何帮助都会很棒!
答案 0 :(得分:2)
您需要的正则表达式是用来获得帖子中提到的预期匹配项的
(.*?)(\[[^[\]]*\])(.*)
在这里
(.*?)
-该部分在分隔符模式之前尽可能少地捕获Before
部分,并捕获group1中的数据(\[[^[\]]*\])
-该部分捕获以文字[
开头的分隔符,后跟[
和]
以外的任何零个或多个字符,后跟{{1 }} ]
-最后,这捕获了(.*)
部分的其余部分Java代码
After
按预期方式打印以下内容,
List<String> list = Arrays.asList("$.Colors[*].name","$.Colors[*].Color[*].name","$.Colors[?(@.type == 'Primary')].Color[*].name");
Pattern p = Pattern.compile("(.*?)(\\[[^\\[\\]]*\\])(.*)");
list.forEach(x -> {
Matcher m = p.matcher(x);
if (m.matches()) {
System.out.println("For string: " + x);
System.out.println("Before: "+ m.group(1));
System.out.println("Separator: "+ m.group(2));
System.out.println("After: "+ m.group(3));
System.out.println();
}
});