[英]String array to object array with key-value pair inside the string
我想用字符串数组中的键值对构造一个 object 数组。
字符串数组格式:
['<ISO Date> - <Log Level> - {"transactionId: "<UUID>", "details": "<message event/action description>", "err": "<Optionall, error description>"}']
object 数组格式:
[{"timestamp": <Epoch Unix Timestamp>, "loglevel": "<loglevel>", "transactionId: "<UUID>", "err": "<Error message>" }]
stringArray = [
"2021-08-09T02:12:51.259Z - error - {\"transactionId\":\"9abc55b2-807b-4361-9dbe-aa88b1b2e978\",\"details\":\"Cannot find user orders list\",\"code\": 404,\"err\":\"Not found\"}",
"2022-08-09T02:12:51.275Z - error - {\"transactionId\":\"9abc55b2-807b-4361-9dbe-aa88b1b2e978\",\"details\":\"Cannot find user orders list\",\"code\":404,\"err\":\"Cannot find user orders list"}"
];
objectArray = [
{
"timestamp":1628475171259,
"loglevel":"error",
"transactionId":"9abc55b2-807b-4361-9dbe-aa88b1b2e978",
"err":"Not found"
},
{
"timestamp":1660011171275,
"loglevel":"error",
"transactionId":"9abc55b2-807b-4361-9dbe-aa88b1b2e97",
"err":"Cannot find user orders list"
}
];
您可以将每一行解构为"timestamp" - "logLevel" - "jsonStringified"
后者可以是JSON.parse
d 来检索 object
请注意,也许您应该确保每一行都包含格式。 否则你会有错误需要处理(如果没有jsonStringified,其他人输出了一些随机行,等等)
stringArray = [ "2021-08-09T02:12:51.259Z - error - {\"transactionId\":\"9abc55b2-807b-4361-9dbe-aa88b1b2e978\",\"details\":\"Cannot find user orders list\",\"code\": 404,\"err\":\"Not found\"}", "2022-08-09T02:12:51.275Z - error - {\"transactionId\":\"9abc55b2-807b-4361-9dbe-aa88b1b2e978\",\"details\":\"Cannot find user orders list\",\"code\":404,\"err\":\"Cannot find user orders list\"}" ]; const tsCapture = '(.{'+"2022-08-09T02:12:51.275Z".length+'})' const levelCapture = '(error|warning|debug)' const stringCapture = '(.+)' const reg = new RegExp('^'+tsCapture + ' - ' + (levelCapture) + ' - ' + stringCapture+'$') const parsed = stringArray.map(line => { const [_, timestamp, logLevel, str] = line.match(reg) return {timestamp, logLevel, ...JSON.parse(str)} }) console.log({ parsed })
在 Java 中,您可以通过使用令牌拆分来做到这一点
JSONArray jsonArray = new JSONArray();
for(int i=0;i<stringArray.length; i++) {
String string = stringArray[i];
String[] stringSplit = string.split(" - ");
JSONObject object = new JSONObject();
object.put("timestamp", stringSplit[0]);
object.put("loglevel", stringSplit[1]);
String[] transtactionDetailSplit = stringSplit[2].split(":|,");
object.put("transactionId", transtactionDetailSplit[1]);
object.put("err", transtactionDetailSplit[7]);
jsonArray.add(object);
}
System.out.println(jsonArray);
请在需要的地方添加 null 检查
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.