如何在包含Python子字符串的jsonpath表达式中过滤url列表

2024-05-23 21:43:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须在一个包含Python子字符串的jsonpath表达式中过滤url列表,我尝试了以下操作,但未能获得所需的结果。在

我提到了http://goessner.net/articles/JsonPath/和{a2}

以下是我尝试过的所有细节:

我的json响应:

{
  "127.0.0.1": {
    "URLs": [
      "http://www.test.ca/", 
      "http://b.scorecardresearch.com/p?ns__t=1387392184071&ns__c=ISO-8859-1&c1=3&c3=_es_7948950&c4=56568219&c5=105139691&c6=&c10=1&c11=1016510&c13=728x90&c16=dfa&c2=14397547&ax_iframe=2&ns_ce_mod=vce_st&ns__p=1387391507295&ax_cid=14397547&ax_bl=0&ax_blt=1228&ns_ad_event=show&ns_ad_id=DCF277937840&ns_ad_sz=728x90", 
      "http://cdn.media.ca/a/mediative/sites/test_en.js", 
      "http://pt200233.unica.com/ntpage.gif?js=1&ts=1387392184554.791&lc=http%3A%2F%2Fwww.test.ca%2F%3Fni_title%3D%2Fhome%2Fhomepage&rf=http%3A%2F%2Fwww.test.ca%2F&rs=1680x1050&cd=32&ln=en&tz=GMT%20-05%3A00&jv=1&ck=UnicaID%3DwQVZatfvXZ5-YZ0yaPj&m.pn=homepage&m.mlc=%2Fhome&m.cv_c13=ctest-new&m.cv_c14=en&m.utv=ut.ctest.2.2.131022.74&m.host=www.test.ca&m.page=%2Fhome%2Fhomepage&m.mlc0=home&ets=1387392184559.194&site=test", 
    ]
  }
}

以上Json响应解析为:

^{pr2}$

为了从JSON响应中获取所有url的列表,我尝试了以下方法,效果很好:

'\n'.join(jsonpath.jsonpath(parsed_input, '$..URLs[*]')

输出:

http://www.test.ca/
http://b.scorecardresearch.com/p?ns__t=1387392184071&ns__c=ISO-8859-1&c1=3&c3=_es_7948950&c4=56568219&c5=105139691&c6=&c10=1&c11=1016510&c13=728x90&c16=dfa&c2=14397547&ax_iframe=2&ns_ce_mod=vce_st&ns__p=1387391507295&ax_cid=14397547&ax_bl=0&ax_blt=1228&ns_ad_event=show&ns_ad_id=DCF277937840&ns_ad_sz=728x90"    
http://cdn.media.ca/a/mediative/sites/test_en.js"    
http://pt200233.unica.com/ntpage.gif?js=1&ts=1387392184554.791&lc=http%3A%2F%2Fwww.test.ca%2F%3Fni_title%3D%2Fhome%2Fhomepage&rf=http%3A%2F%2Fwww.test.ca%2F&rs=1680x1050&cd=32&ln=en&tz=GMT%20-05%3A00&jv=1&ck=UnicaID%3DwQVZatfvXZ5-YZ0yaPj&m.pn=homepage&m.mlc=%2Fhome&m.cv_c13=ctest-new&m.cv_c14=en&m.host=www.test.ca&m.page=%2Fhome%2Fhomepage&m.mlc0=home&ets=1387392184559.194&site=test

接下来,我只检索那些包含单词“unica”的url。 我已经尝试了下面的所有方法,但是收到了类型错误,
我错过了什么?公司名称:

'\n'.join(jsonpath.jsonpath(parsed_input, '$..URLs[?(/unica/)]'))
'\n'.join(jsonpath.jsonpath(parsed_input, '$..URLs[?(@(unica))]'))
'\n'.join(jsonpath.jsonpath(parsed_input, '$..URLs[?(@.(*.unica.*))]'))
'\n'.join(jsonpath.jsonpath(parsed_input, '$.*.URLs[?(unica)]'))
'\n'.join(jsonpath.jsonpath(parsed_input, '$.*.URLs[?:unica]'))

谢谢,
山姆


Tags: testcomhttpinputwwwaxparsedurls
1条回答
网友
1楼 · 发布于 2024-05-23 21:43:20

那个?操作符引入了一个在Python中运行的脚本元素,因此需要使用Python语法。在

在这种情况下,您可以使用:

print '\n'.join(jsonpath.jsonpath(parsed_input, "$..URLs[?('unica' in @)]"))

对于这些情况,一个有用的选项是通过以下方式使用调试选项:

^{pr2}$

这将打印出各种输出,包括:

evalx /unica/
eval /unica/
invalid syntax (<string>, line 1)

“eval/unica/”行显示了在Python中运行的内容,这样您就可以看到哪些失败了。在

相关问题 更多 >