从下面的JSON文件中我想要提取X Time
和Y Time
。最简单的方法是什么?
{
"Timestamp": "Mon Mar 16 21:37:22 EDT 2015",
"Event": "Reporting Time",
"Message": "load for http://xxx.xx.xx.xx:1xxxx/operations&proxy=www.mywebsite.co.nz&send=https://xxx.xx.xx.xx:xxxx took (X Time: 306 ms, Y Time: 1923 ms)StatusCode: Unknown<br>Cookies: nzh_weatherlocation=12; dax_ppv=11|NZH:home|NZH:home|NZH:home|9|undefined; Safari/537.36<br>CPUs: 2<br>Language: en-GB",
}
答案 0 :(得分:1)
你可以使用grep。
$ grep -o '[YX]\s*Time:\s*[^,)]*' file
X Time: 306 ms
Y Time: 1923 ms
[YX]
将匹配X
或Y
\s*
匹配零个或多个空格字符。
Time:\s*
匹配字符串Time
以及以下零个或多个空格。
[^,)]*
否定字符类,匹配任何字符但不包含逗号或)
,零次或多次。
答案 1 :(得分:0)
以下是使用捕获:
的jq解决方案 .Message
| capture("X Time: (?<X Time>[^,]+), Y Time: (?<Y Time>[^)]+)")
如果此过滤器位于filter.jq
且输入数据位于input.json
jq -M -f filter.jq input.json
将产生
{
"X Time": "306 ms",
"Y Time": "1923 ms"
}
答案 2 :(得分:-1)
首先,我建议你的Gson或Jackson库(用于序列化/反序列化)json对象更容易。
但是,如果我是你,我会用这种方式手动制作:
JsonObject MyJson = new JsonObject(yourstring);
1.-获得X时间或Y时间:
String FullMessage=MyJson.getString("message");
int XPosition=FullMessage.indexOf("X Time:");
int YPosition=FullMessage.indexOf("Y Time:");
int EndYPosition=FullMessage.indexOf("ms)");
String XTime=FullMessage.substring(XPosition,Yposition);
String YTime=FullMessage.subString(Yposition,EndYPosition);
/ * 通过这种方式你可以获得x和y数据,我没有测试过,但我写的主要想法。 * /
2. - 并且要写出网址很简单,只需制作:
MyObject.putString("url","www.mywebsite.co.nz"); //and thats all
但我建议使用和Serializer / deserializer库,它更容易和更好。
问候。