如何从JSON数据中提取URL?

时间:2010-10-10 09:16:50

标签: perl json

我有一个文本文档,我想从中提取URL并将它们放在一个新的文本文件中。我怎么能在Perl中做到这一点?文本文件的示例如下:

  

{ “类型”: “TabGroupsManager:GroupData”, “ID”:65, “名称”:“XML   架构   编辑器 “ ”形象“: ”http://www.altova.com/favicon.ico“, ”disableAutoRename“:假的, ”titleList“:” XML   架构编辑器\ u000aAltova XMLSpy代码   生成\ u000a在线视频   演示\ u000a计划数据交换   案例研究\ u000aXML编辑器\ u000aAltova   XMLSpy 2011 \ u000aXML架构管理   工具\ u000a “ ”标签“: ”{\“ 项\ ”:[{\“ URL \ ”:\“ HTTP://www.altova.com/xmlspy/xml-schema-editor.html \”, \ “称号\”:\“XML   架构   编辑\ “\ ”ID \“:1442422751,\ ”引荐\“:\ ”HTTP://www.altova.com/xmlspy/xml-editing.html \“,\ ”滚动\“:\” 0 0 \ “\ ”FORMDATA \“:{\ ”#q构成\“:\ ”\“}}],\ ”指数\“:1,\ ”属性\“:{\ ”图像\“:\” HTTP ://www.altova.com/favicon.ico \ “},\” 扩展数据\ “:{\” TabGroupsManagerGroupId \ “:\” 65 \ “\ ”TabGroupsManagerGroupName \“:\” XML   架构   编辑\ “} \” _formDataSaved \ “:真正}”, “{\” 项\ “:[{\” URL \ “:\” http://www.altova.com/xmlspy/xml-code-generation html的\ “\ ”称号\“:\” Altova公司   XMLSpy代码   代\ “\ ”ID \“:1442423118,\ ”引荐\“:\” http://www.google.com/search?hl=en&client=firefox-a&hs=GR1&rls=org。的Mozilla%3Aen-GB%3Aofficial&安培; q = Altova的+导出+模式+从+ XML&安培;水溶液= F&安培; AQI = M1&安培; AQL =安培; OQ =安培; gs_rfai = \ “\ ”滚动\“:\” 0 ,0 \ “\ ”FORMDATA \“:{\ ”#q构成\“:\ ”\“}}],\ ”指数\“:1,\ ”属性\“:{\ ”图像\“:\” http://www.altova.com/favicon.ico\"},\"extData\":{\"TabGroupsManagerGroupId\":\"65\",\"TabGroupsManagerGroupName\":\"XML   架构   编辑\ “} \” _formDataSaved \ “:真正}”, “{\” 项\ “:[{\” URL \ “:\” http://www.altova.com/videos.asp?type=0& ;视频= XMLSpy的\ “\ ”称号\“:\” 在线   视频   演示\ “\ ”ID \“:1442423184,\ ”引荐\“:\ ”HTTP://www.altova.com/xmlspy/xml-code-generation.html \“,\ ”滚动\“:\” 0,0 \”,\ “FORMDATA \”:{\ “#q构成\”:\ “\”}}],\ “指数\”:1,\ “属性\”:{\ “图像\”:\ “http://www.altova.com/favicon.ico\"},\"extData\":{\"TabGroupsManagerGroupId\":\"65\",\"TabGroupsManagerGroupName\":\"XML   架构   编辑\ “} \” _formDataSaved \ “:真正}”, “{\” 项\ “:[{\” URL \ “:\” HTTP://www.altova.com/solutions/exchange_ratecasestudy.html \” ,\ “称号\”:\“计划   数据交换案例   研究\ “\ ”ID \“:2618,\ ”FORMDATA \“:{\ ”#q构成\“:\ ”\“},\ ”滚动\“:\ ”0,1369 \“}],\”指数\ “:1,\” 属性\ “:{\” 图像\ “:\” HTTP://www.altova.com/favicon.ico \ “},\” 扩展数据\ “:{\” TabGroupsManagerGroupId \” :\ “65 \”,\ “TabGroupsManagerGroupName \”:\“XML   架构   编辑\ “} \” _formDataSaved \ “:真正}”, “{\” 项\ “:[{\” URL \ “:\” HTTP://www.altova.com/xml-editor/ \”, \ “称号\”:\“XML   编辑\ “\ ”ID \“:2620,\ ”FORMDATA \“:{\ ”#q构成\“:\ ”\“},\ ”滚动\“:\ ”0,0 \“}],\”指数\ “:1,\” 属性\ “:{\” 图像\ “:\” HTTP://www.altova.com/favicon.ico \ “},\” 扩展数据\ “:{\” TabGroupsManagerGroupId \” :\ “65 \”,\ “TabGroupsManagerGroupName \”:\“XML   架构   编辑\ “} \” _formDataSaved \ “:真正}”, “{\” 项\ “:[{\” URL \ “:\” http://manual.altova.com/XMLSpy/spystandard/index.html ?xmlschemasstd.htm \ “\ ”称号\“:\” Altova公司   XMLSpy的   2011 \ “\ ”ID \“:2622,\ ”孩子\“:[{\ ”URL \“:\ ”HTTP://manual.altova.com/XMLSpy/spystandard/xmlspy_content_dyn.html \“,\” title \“:\”Altova XMLSpy   2011 \”,\ “ID \”:2623,\ “引用\”:\ “HTTP://manual.altova.com/XMLSpy/spystandard/index.html xmlschemasstd.htm \”,\ “滚动\”: \ “0,0 \”},{\ “URL \”:\ “HTTP://manual.altova.com/XMLSpy/spystandard/xmlschemasstd.htm \”,\ “称号\”:\“XML   模式\”,\ “ID \”:2624,\ “引用\”:\ “HTTP://manual.altova.com/XMLSpy/spystandard/index.html xmlschemasstd.htm \”,\ “滚动\”: \ “0260 \”}],\ “滚动\”:\ “0,0 \”}],\ “指数\”:1,\ “属性\”:{},\ “扩展数据\”:{\” TabGroupsManagerGroupId \ “:\” 65 \ “\ ”TabGroupsManagerGroupName \“:\” XML   架构   编辑\ “} \” _formDataSaved \ “:真正}”, “{\” 项\ “:[{\” URL \ “:\” HTTP://www.altova.com/schemaagent.html \”,\ “标题\”:\“XML   架构管理   工具\ “\ ”ID \“:2626,\ ”FORMDATA \“:{\ ”#q构成\“:\ ”\“},\ ”滚动\“:\ ”0171 \“}],\” 指数\ “:1,\” 属性\ “:{\” 图像\ “:\” HTTP://www.altova.com/favicon.ico \ “},\” 扩展数据\ “:{\” TabGroupsManagerGroupId \“:\ “65 \”,\ “TabGroupsManagerGroupName \”:\“XML   架构   编辑器\ “},\” _ formDataSaved \ “:真}”]}

由此我想创建一个文本文件,如:

http://www.altova.com/xmlspy/xml-schema-editor.html
http://www.altova.com/xmlspy/xml-code-generation.html

2 个答案:

答案 0 :(得分:7)

由于它似乎是JSON文件而不是纯文本文件,因此请使用JSON modules on CPAN之一。这有点复杂,因为您似乎将数据编码为JSON,然后将其存储为更大的对象中的字符串,然后将其转换为JSON - 因此您必须解析文件,提取字符串,将其解析为JSON in转而然后从中提取URI。

答案 1 :(得分:2)

如果Perl不是必须的,

$ sed 's|\\||g' file| awk -vRS='"url":' -F"," '{print $1}' | grep -E "http|ftp"
"http://www.altova.com/xmlspy/xml-schema-editor.html"
"http://www.altova.com/xmlspy/xml-code-generation.html"
"http://www.altova.com/videos.asp?type=0&video=xmlspy"
"http://www.altova.com/solutions/exchange_ratecasestudy.html"
"http://www.altova.com/xml-editor/"
"http://manual.altova.com/XMLSpy/spystandard/index.html?xmlschemasstd.htm"
"http://manual.altova.com/XMLSpy/spystandard/xmlspy_content_dyn.html"
"http://manual.altova.com/XMLSpy/spystandard/xmlschemasstd.htm"
"http://www.altova.com/schemaagent.html"