我正在进行API调用,并使用Cheshire来解析JSON:
(defn fetch_headlines [source]
(let [articlesUrl (str "https://newsapi.org/v2/top-headlines?sources="
source
"&apiKey=a688e6494c444902b1fc9cb93c61d6987")]
(-> articlesUrl
client/get
generate-string
parse-string)))
JSON有效负载:
{“状态” 200,“标题” {“ access-control-allow-headers”“ x-api-key, 授权”,“内容类型”,“ application / json; charset = utf-8“, “访问控制允许来源”“ *”,“内容长度”“ 7434”, “连接”,“关闭”,“编译指示”,“无缓存”,“到期”,“-1”, “ access-control-allow-methods”“ GET”,“ date”“ 2019年3月28日,星期四 20:22:16 GMT”,“ x-cached-result”,“ false”,“ cache-control”,“ no-cache”}, “身体” “ {\” status \“:\” ok \“,\” totalResults \“:10,\” articles \“:[{\” source \“:{\” id \“:\” cnn \“,\ “ name \”:\“ CNN \”},\“ author \”:null,\“ title \”:\“ Trump: 穆勒的调查是政府的“试图接管”-CNN 视频\“ \”描述\“:\”在Fox News接受Sean Hannity采访时, 特朗普总统呼吁特别律师罗伯特·穆勒(Robert Mueller)的调查 \“”试图收购我们 政府。\\“ \”,\“ url \”:\“ http://us.cnn.com/videos/politics/2019/03/28/trump-mueller-probe-attempted-takeover-hannity-cpt-sot-vpx.cnn \”,\“ urlToImage \”:\“ https://cdn.cnn.com/cnnnext/dam/assets/190324191527-06-trump-mueller-reaction-0324-super-tease.jpg \”,\“ publishedAt \”:\“ 2019- 03-28T20:09:04.1891948Z \“,\” content \“:\”聊天 与我们在Facebook Messenger中。了解世界上正在发生的事情 因为它 展开。\“},{\”源\“:{\” id \“:\” cnn \“,\”名称\“:\” CNN \“},\”作者\“:空,\”标题\“:\“詹姆士 克拉珀回应称他应该接受调查-CNN 视频\“ \”描述\“:\”国家情报局前局长 詹姆斯·克拉珀(James Clapper)对白宫新闻秘书萨拉·桑德斯(Sarah Sanders)做出反应 说他和其他前情报官员应该 在特别律师罗伯特·穆勒(Robert Mueller)没有成立后进行调查 之间的串通 Tr…\“,\” url \“:\” http://us.cnn.com/videos/politics/2019/03/26/james-clapper-reponse-mueller-report-sarah-sanders-criticism-bts-ac360-vpx.cnn \“,\” urlToImage \“:\” https://cdn.cnn.com/cnnnext/dam/assets/190325211210-james-clapper-ac360-03252019-super-tease.jpg \“,\” publishedAt \“:\” 2019-03-28T20 :08:43.1736236Z \“,\”内容\“:\”聊天 与我们在Facebook Messenger中。了解世界上正在发生的事情 因为它 展开。\“},{\”源\“:{\” id \“:\” cnn \“,\”名称\“:\” CNN \“},\”作者\“:\”梅根 Vazquez,CNN \“,\” title \“:\”特朗普自穆勒以来首次集会 调查结束\“,\”描述\“:\”唐纳德·特朗普总统, 自罗伯特·穆勒(Robert Mueller)结束他的自 调查将在大瀑布城的一次集会上发表, 密歇根州星期四 晚上。\“,\” url \“:\” http://us.cnn.com/2019/03/28/politics/donald-trump-grand-rapids-rally/index.html \“,\” urlToImage \“:\” https://cdn.cnn.com/cnnnext/dam/assets/190321115403-07-donald-trump-lead-image-super-tease.jpg \“,\” publishedAt \“:\” 2019-03-28T19 :49:26Z \“,\”内容\“:\”华盛顿 (CNN)总统唐纳德·特朗普(Donald Trump)首次露面 自从罗伯特·穆勒(Robert Mueller)结束调查以来,他们的支持者将 周四在密歇根州大急流城的一次集会上发表讲话 晚上。\ r \ n这次集会是在华盛顿一个混乱的一周之后进行的,尤其是在… [+2099 chars] \“},{\” source \“:{\” id \“:\” cnn \“,\”名称\“:\” CNN \“},\”作者\“:\”凯特琳 CNN的Polantz,“ \”标题\“:\”法官命令司法部移交法官 Comey memos \“,\” description \“:\”联邦法官已下令 在美国有线电视新闻网(CNN)和 其他媒体组织可以访问纪念文件 前联邦调查局局长与唐纳德总统的互动 Trump。\“,\” url \“:\” http://us.cnn.com/2019/03/28/politics/james-comey-memo-lawsuit/index.html \“,\” urlToImage \“:\” https://cdn.cnn.com/cnnnext/dam/assets/181209143047-comey-1207-super-tease.jpg \“,\” publishedAt \“:\” 2019-03-28T19 :14:45Z \“,\”内容\“:\”华盛顿 (CNN)一名联邦法官下令司法部和联邦调查局 在法院盖章的情况下,将詹姆斯·科米的备忘录完整地提交法院 CNN和其他媒体组织提起的访问 纪念前联邦调查局局长的文件…[+1043 chars] \“},{\” source \“:{\” id \“:\” cnn \“,\”名称\“:\” CNN \“},\”作者\“:\” Clare Foran和Manu Raju,CNN \“,\”标题\“:\”佩洛西称AG对 穆勒报告“自大”,“描述”:“众议院议长南希” 佩洛西周四批评司法部长威廉·巴尔的摘要 律师罗伯特·穆勒(Robert Mueller)的报告 \\“居高临下\”和\\“傲慢\\”并说\\“不是 正确的事情 do。\\“ \”,\“ url \”:\“ http://us.cnn.com/2019/03/28/politics/pelosi-mueller-report-congress-barr-summary/index.html \”,\“ urlToImage \”:\“ https://cdn.cnn.com/cnnnext/dam/assets/190328130240-02-nancy-pelosi-03282019-super-tease.jpg \”,\“ publishedAt \”:\“ 2019- 03-28T18:48:25Z \“,\” content \“:null},{\” source \“:{\” id \“:\” cnn \“,\” name \“:\” CNN \“ },\“ author \”:\“分析 CNN总编辑Chris Cillizza撰写,“,”标题“:\” 43个最 唐纳德·特朗普对肖恩的电话采访中的离谱话 Hannity \“,\” description \“:\”没有该总裁的\“记者\” 唐纳德·特朗普比福克斯新闻的肖恩·汉尼提更喜欢-主要是由于 汉妮蒂(Hannity)对总统的坚定支持,就像小狗一样。王牌 喜欢奖励与他和睦相处的人,这使我们对 45分钟 ph…\“,\” url \“:\” http://us.cnn.com/2019/03/28/politics/sean-hannity-donald-trump-mueller/index.html \“,\” urlToImage \“:\” https://cdn.cnn.com/cnnnext/dam/assets/190328140149-01-hannity-trump-file-super-tease.jpg \“,\” publishedAt \“:\” 2019-03-28T18 :44:21Z \“,\” content \“:\”(CNN) 没有唐纳德·特朗普总统比福克斯更喜欢的“记者” 新闻的肖恩·汉妮蒂(Sean Hannity)-很大程度上是由于汉妮蒂坚定不移的小狗 狗对总统的支持。特朗普喜欢奖励那些 和他玩得很融洽,这使我们走了45分钟…[+14785 chars] \“},{\” source \“:{\” id \“:\” cnn \“,\”名称\“:\” CNN \“},\”作者\“:空,\”标题\“:\”波多黎各 Rico Gov .:我会把恶霸打在嘴里-CNN 视频”,“描述”:“”在接受CNN独家采访时,波多黎各 波多黎各州长里卡多·罗塞洛表示,他不会坐下来允许 他的官员被白人欺负 House。\“,\” url \“:\” http://us.cnn.com/videos/politics/2019/03/28/ricardo-rossello-trump-bully-puerto-rico-sot-vpx.cnn \“,\” urlToImage \“:\” https://cdn.cnn.com/cnnnext/dam/assets/190328123504-puerto-rico-gov-ricardo-rosello-super-tease.jpg \“,\” publishedAt \“:\” 2019-03-28T18 :08:33.7312458Z \“,\”内容\“:\”聊天 与我们在Facebook Messenger中。了解世界上正在发生的事情 因为它 展开。\“},{\”源\“:{\” id \“:\” cnn \“,\”名称\“:\” CNN \“},\”作者\“:\”杰里米 赫伯(Herb),马努·拉茹(Manu Raju)和泰德·巴雷特(Ted Barrett),CNN \“,\”标题\“:\”杰瑞德·库什纳(Jared Kushner) 参议院情报采访 委员会”,“说明”:“唐纳德·特朗普总统的女son 贾里德·库什纳(Jared Kushner)返回参议院情报委员会 作为委员会俄罗斯的一部分,星期四进行了闭门采访 调查。\“,\” url \“:\” http://us.cnn.com/2019/03/28/politics/jared-kushner-senate-intelligence/index.html \“,\” urlToImage \“:\” https://cdn.cnn.com/cnnnext/dam/assets/180302124221-30-jared-kushner-super-tease.jpg \“,\” publishedAt \“:\” 2019-03-28T16 :21:29Z \“,\” content \“:null},{\” source \“:{\” id \“:\” cnn \“,\” name \“:\” CNN \“},\ “作者\”:\“杰里米 赫伯(Cherb)和劳拉·贾瑞特(Laura Jarrett),CNN \“ \”标题\“:\”穆勒报道超过300 页面,消息来源说\“,\”描述\“:\”特别顾问罗伯特 穆勒(Mueller)关于俄罗斯调查的机密报告不仅限于 据司法部官员称,共有300页,第二页 有知识的来源 事项。\“,\” URL \“:\” http://us.cnn.com/2019/03/28/politics/mueller-report-pages/index.html \“,\” urlToImage \“:\” https://cdn.cnn.com/cnnnext/dam/assets/190324130054-05-russia-investigation-0324-super-tease.jpg \“,\” publishedAt \“:\” 2019-03-28T15 :52:01Z \“,\” content \“:null},{\” source \“:{\” id \“:\” cnn \“,\” name \“:\” CNN \“},\ “作者\”:\“吉姆 Acosta和Kevin Liptak,CNN \“,\” title \“:\”独家:波多黎各 州长警告白宫关于资金紧张的描述 在唐纳德·特朗普总统和波多黎各总统之间升级 救灾工作进展缓慢的州长 飓风过后仍受重创的岛屿 Maria。\“,\” url \“:\” http://us.cnn.com/2019/03/28/politics/ricardo-rossell-donald-trump-puerto-rico-funding/index.html \“,\” urlToImage \“:\” https://cdn.cnn.com/cnnnext/dam/assets/180920230539-pr-storm-of-controversy-rossello-trump-super-tease.jpg \“,\” publishedAt \“:\” 2019-03-28T15 :19:39Z \“,\”内容\“:null}]}”, “跟踪重定向” [“ https://newsapi.org/v2/top-headlines?sources=cnn&apiKey=a688e6494c444902b1fc9cb93c61d687”]
我想提取以从返回的JSON有效负载中提取URL,我已经尝试过:
(defn fetch_headlines [source]
(let [articlesUrl (str "https://newsapi.org/v2/top-headlines?sources="
source
"&apiKey=a688e6494c444902b1fc9cb93c61d697")]
(-> articlesUrl
client/get
generate-string
parse-string
(get-in ["source" "url"]))))
但是我得到nil
的结果,有什么想法吗?
基于用户反馈的解决方案:
(defn fetch-headlines [source]
(let [articlesUrl (str "https://newsapi.org/v2/top-headlines?sources="
source
"&apiKey=a688e6494c444902b1fc9cb93c61d697")]
(-> articlesUrl
client/get
:body
parse-string
(get-in ["articles" 0 "url"]))))
答案 0 :(得分:1)
您需要的是body
键内部,但是与该键对应的值仍然是字符串,而不是clojure映射。当您寻找source
时,您将得到nil
,因为该密钥不存在(在将字符串正确解析为json后,它应该位于body
内)。
一旦您正确解析了body
值,它应该类似于:
(let [index-of-article 0]
(get-in response ["body" "articles" index-of-article "url"]))
其中index-of-article
是您想要的文章的位置索引,因为文章包含文章的向量。