【发布时间】:2012-12-07 04:52:25
【问题描述】:
我正在从here on freebase 获取一些 json(注意,您只能请求几次而不使用 &key=your-key)。
我想将响应转换成类似这样的内容:
({:case "Roe v. Wade", :plaintiffs ("Norma McCorvey"), :defendants ("Henry Wade"), :court "Supreme Court of the United States", :subjects ("Abortion" "Privacy"), :article "http://wp/en/68493"} ...)
这是我在使用 clojure.data.json/read-string 后想出的代码:
(defn extract-data [case]
{:case (case "name")
:plaintiffs (flatten (map #(get % "parties") (filter (fn [p] (some #(= (% "id") "/en/plaintiff") (p "role")))
(case "/law/legal_case/parties"))))
:defendants (flatten (map #(get % "parties") (filter (fn [p] (some #(= (% "id") "/en/defendant") (p "role")))
(case "/law/legal_case/parties"))))
:court (get-in case ["court" 0 "name"])
:subjects (map #(% "name") (case "subject"))
:article (get-in case ["/common/topic/article" 0 "source_uri" 0])})
(def response (-> query-uri
java.net.URL.
slurp
json/read-str))
(def case-data (map extract-data (response "result")))
提取数据似乎过于复杂,有没有更好的方法来做到这一点?这是可以使用 core.logic 的情况吗?如果有,怎么做?
【问题讨论】:
标签: clojure clojure-core.logic