从 JSON 文件中提取特定值

Extracting a particular value from a JSON file

我想从下面的 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",

}

你可以使用 grep。

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

  • \s* 匹配零个或多个 space 个字符。

  • Time:\s* 匹配字符串 Time 加上后面的零个或多个 space.

  • [^,)]* 否定字符 class 匹配任何字符但不匹配逗号或 ),零次或多次。

首先,我推荐你的 Gson 或 Jackson 库(用于 serialize/deserialize)json 对象更容易。

但是,如果我是你,我会用这种方式手动制作:

JsonObject MyJson= new JsonObject(你的字符串);

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.- 写 url 很容易,只要做到:

MyObject.putString("url","www.mywebsite.co.nz"); //and thats all

但我建议使用 Serializer/deserializer 库,它更简单更好。

此致。

这是一个使用 capture 的 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"
}