jmeter--正則提取json串中一個大括號對象里指定字段值的的另一個字段的值


需要提取如圖紅框_id的值,整個返回里有多個類似的大括號對象:
里面的第一個id的值,但是整個json串不止這么一個,並且只能匹配quality_level是349的這個大括號里的第一個id的值。下面使用3種方法:
第一種:最笨的方法,所有字段都寫出來做匹配
{"_id":"(.{10,30}?)","agent":{"_id":"[^"]*?","name":"[^"]*?"},"category":{"_id":"[^"]*?","name":"[^"]*?"},"create_time":[^"]*?,"duration":[^"]*?,"end_time":[^"]*?,"is_resolved":[^"]*?,"is_inspected":[^"]*?,"inspector":"[^"]*?","inspect_time":[^"]*?,"location":"[^"]*?","quality_level":349
這個正則是把整個從第一個id到quality之間的所有字段都寫出來,每個字段都匹配了。因為每個字段的值里肯定不會帶有雙引號,所以用了排除雙引號的表達式[^"]。這樣就可以保證每個字段只會匹配到他原本的值,不會過多的匹配其他內容。這是最笨的辦法
第二種:在第一種的基礎上最變更
\{"_id":"(\w{24})","agent":\{[^{}]+?\},"category":\{[^{}]+?\}[^{}]+?"quality_level":349,
這個正則用了過濾大括號的表達式[^{}],因為我們看到那么多json串都是用大括號分割的,那我只要讓我表達式里面不匹配大括號,即匹配的內容里不能有大括號就能把整個范圍定位到了一個大括號里,但是呢,由於agent跟category下又都有大括號,所以我只能把他們2個大括號先做匹配出來,再在他們2個括號里面去匹配不帶大括號的內容。
第三種:使用不包含某些指定的單詞語法
{"_id":"(.{10,30}?)","agent"(?:(?!agent).)*,"quality_level":349
這個正則用了不包含某個單次的匹配語法 (?!agent). 這個表達式就是去匹配每個字符串之前是否包含了agent,包含就為false,只有不字符前都沒有agent才為true,這樣我就可以對着這個表達式加上星號(*),讓他去匹配每個,"agent"后面的內容,只有不含agent的內容才能匹配到,這樣就可以保證了我id到quality里面只會有一個agent。就實現了只匹配一個大括號的內容了
 
當然類似這種json串的返回值要提取,可以直接使用json解析,會更加的方便


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM