Java正则表达式 匹配json格式的字符串某个值的key值
在处理数据中,需要找到含有某个值的数组的key的内容,比如:
Json数据格式:
{"file_c":[{"uploadTime":"1621998257947","size":"147879","requestId":"594885615247740928","name":"充值卡.txt"}],"content":"上传附件"}根据是否含有uploadTime上传时间,来判断是否有附件的内容,并获取到对应的key值“file_c”
语法:
. | 匹配除了换行符以外的任何字符 |
\w | 匹配字母或数字或下划线或汉字 等价于'[^A-Za-z0-9_]' |
处理
写正则表达式:
因为匹配的是 带数组的字符串,key值是数字和大小写加下划线组成的:([0-9a-zA-Z_]*)或是用 \w
value值是:[{开头的,中间有各种值,所以用“.”即: "\\[\\{.*"
中间是用: 分隔的即 "\":"
最后: String pattern = "(\\w*)"+"\":"+"\\[\\{.*" + keyField;
使用.*:
private static String getContainKey(String content, String keyField) {
System.out.println("content "+content);
String patternStr = "\\[\\{.*";
String pattern = "(\\w*)"+"\":"+patternStr + keyField;
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(content);
String aimKey = "";
if (m.find()) {
aimKey = m.group(1);
}
System.out.println("aim "+aimKey);
return aimKey;
}
JSON测试:
public static void main(String[] args) {
testJson();
}
public static void testJson() {
JSONObject paramJson = new JSONObject();
paramJson.put("file_json", initAttachData());
paramJson.put("content", "上传附件");
paramJson.put("startDate", "2021-05-01 00:00:00");
paramJson.put("endDate", "2021-05-13 00:00:00");
getContainKey(paramJson.toString(), "uploadTime");
}
public static List<Map<String,Object>> initAttachData(){
String attach = "{\"uploadTime\":\"1621998257947\",\"size\":\"147879\",\"requestId\":\"594885615247740928\",\"name\":\"充值卡.txt\"}";
Map<String,Object> paramMap = JSON.parseObject(attach);
List<Map<String,Object>> attachList = new ArrayList<>();
attachList.add(paramMap);
return attachList;
}
结果:
content {"endDate":"2021-05-13 00:00:00","file_json":[{"size":"147879","requestId":"594885615247740928","name":"充值卡.txt","uploadTime":"1621998257947"}],"content":"上传附件","startDate":"2021-05-01 00:00:00"}
aim file_json如果改成map的时候,会如何呢?
因为map会出现“=”的情况,直接把中间的“:”改成“=”可以用吗?
结果却不行,为啥呢? 我也不知道,后面有空再深究
Map测试:
如果是map的格式,换成json的格式:
JSONObject paramJSONObj = JSONObject.parseObject(JSON.toJSONString(paramMap));再进行匹配处理
public static void main(String[] args) {
testMap();
}
public static void testMap() {
Map<String,Object> paramMap = new HashMap<>();
paramMap.put("file_map", initAttachData());
paramMap.put("content", "上传附件");
paramMap.put("startDate", "2020-01-01 00:00:00");
paramMap.put("endDate", "2020-01-13 00:00:00");
JSONObject paramJSONObj = JSONObject.parseObject(JSON.toJSONString(paramMap));
getContainKey(paramJSONObj.toJSONString(), "uploadTime");
}结果:
content {"file_map":[{"size":"147879","requestId":"594885615247740928","name":"充值卡.txt","uploadTime":"1621998257947"}],"endDate":"2020-01-13 00:00:00","content":"上传附件","startDate":"2020-01-01 00:00:00"}
aim file_map
总结:
匹配json格式字符串的key的时候,根据value的特性来处理,记得“.”可以匹配除了换行符以外的任何字符,就好处理了。一个个去拼接,去测验,多点耐心就完成了。
版权声明:本文为qq_35461948原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。