从JSON文件中提取特定值

时间:2015-03-18 03:33:39

标签: json awk sed jq

从下面的JSON文件中我想要提取X TimeY 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",

}

3 个答案:

答案 0 :(得分:1)

你可以使用grep。

$ grep -o '[YX]\s*Time:\s*[^,)]*' file
X Time: 306 ms
Y Time: 1923 ms
  • [YX]将匹配XY

  • \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库,它更容易和更好。

问候。