Clojure解析JSON对象并提取特定键

时间:2015-07-27 11:10:11

标签: clojure

鉴于我有一个包含内容的json文件:

[
  {
    "email": "benb@mit.edu"
  },
  {
    "email": "aphacker@mit.edu"
  },
  {
    "email": "eval@mit.edu"
  },
  {
    "email": "prolog@mit.edu"
  },
  {
    "email": "bugs@mit.edu"
  },
  {
    "email": "morebugs@mit.edu"
  },
  {
    "email": "test@mit.edu"
  },
  {
    "email": "google@google.com"
  }
]

如何解析此文件并获取每个email标记的值,因为我需要使用这些值执行操作。

示例:

检索电子邮件列表

(benb@mit.edu, aphacker@mit.edu...)

对于列表中的每个元素,将其值传递给函数。我理解如何将它传递给函数,并且遇到get-in函数但我不完全确定如何在此上下文中使用它。

可选地,如果可能,我希望存储文件

benb@mit.edu
aphacker@mit.edu
...

哪个更实用。我知道如何写入文件,但我不知道如何提取电子邮件数据。

2 个答案:

答案 0 :(得分:2)

slurp reads将文件转换为字符串,然后使用JSON解析器(例如cheshiredata.json)将其转换为向量。如果您想使用第二种文件格式,请line-seq look split-lines

or

答案 1 :(得分:1)

克里斯

您可以按照Dax指出的方式读取/解析文件,然后在地图位于向量中时解决问题的其他部分:

(def emails (map :email (json/read-str (slurp fully-qualified-file))))

将每个电子邮件提取到一个序列中。然后,您可以使用以下内容来存储电子邮件,其中每个电子邮件都是生成的文件中的“行”:

(spit fully-qualified-result-file (interpose "\n" emails))