2015-03-18 4 views
0

Из файла JSON ниже я хочу извлечь X Time и Y Time. Каков самый простой способ сделать это?Извлечение определенного значения из файла JSON

{ 
    "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

Ваш JSON строка недействительна. Можете ли вы подтвердить это? http://jsonformatter.curiousconcept.com/ Также, какой ключ/значение вы пытаетесь извлечь? Вы хотите сделать это в JavaScript? – duyn9uyen

+1

@ duyn9uyen, Это действительный JSON, если вы не принимаете во внимание \ t и \ r \ n. И учитывая, что вопрос имеет awk как тег, я не думаю, что он работает с JS. – RainingChain

ответ

1

Вы можете использовать grep.

$ grep -o '[YX]\s*Time:\s*[^,)]*' file 
X Time: 306 ms 
Y Time: 1923 ms 
  • [YX] будет соответствовать либо X или Y

  • \s* соответствует нулю или более символов пробела.

  • Time:\s* Соответствует строке Time плюс следующее ноль или более пробелов.

  • [^,)]* Отрицательный класс символов, который соответствует любому символу, но не запятой или ), ноль или более раз.

+0

Не могли бы вы объяснить это регулярное выражение? – liv2hak

+0

проверить мое обновление .. –

-1

Прежде всего, я рекомендую вашему Gson или Джексон библиотек (используются для сериализации/десериализации) объектов JSON проще.

Но, если бы я тебя я сделать это вручную этого способа:

JSONObject MyJson = новый 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); 

/* того, как вы могли бы получить х и у данных нету я тестировал, но основная идея я пишу. */

2.-А Написать URL легко, просто сделать это:

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

Но я рекомендую использовать и библиотека Serializer/десериализатор, его легче и лучше.

С уважением.

+0

Я не использую js – liv2hak

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" 
} 
Смежные вопросы