从 JSON 文件中提取特定值
Extracting a particular value from a JSON file
我想从下面的 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",
}
你可以使用 grep。
$ grep -o '[YX]\s*Time:\s*[^,)]*' file
X Time: 306 ms
Y Time: 1923 ms
[YX]
将匹配 X
或 Y
\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"
}
我想从下面的 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",
}
你可以使用 grep。
$ grep -o '[YX]\s*Time:\s*[^,)]*' file
X Time: 306 ms
Y Time: 1923 ms
[YX]
将匹配X
或Y
\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"
}