【问题标题】:Clojure parse JSON objects and extract specific keyClojure 解析 JSON 对象并提取特定键
【发布时间】:2015-07-27 20:23:12
【问题描述】:

鉴于我有一个包含内容的 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
...

这样会更实用。我知道如何写入文件等,但我不确定如何提取电子邮件数据。

【问题讨论】:

    标签: clojure


    【解决方案1】:

    slurpreads 将文件转换为字符串,然后使用 JSON 解析器(例如 cheshire 或 data.json)将其转换为向量。如果要使用第二种文件格式,那么lookline-seqorsplit-lines

    【讨论】:

    • 我了解如何从文件中获取字符串,我不了解如何从此类字符串中提取每个 email 值
    • @ChrisEdwards 使用 JSON 解析器,然后如果您想对它们中的每一个执行某些操作,请使用 doseq 执行此操作。例如(doseq [record (cheshire/parse-string (slurp filename))] (my-function (:email record)))
    • 您想将此作为答案发布,以便其他人可以更轻松地找到它吗?
    • @ChrisEdwards 我仍然不确定您在努力解决哪个部分。解析、遍历序列,还是从记录中获取电子邮件?
    • @迭代序列是我的问题
    【解决方案2】:

    克里斯

    您可以像 Dax 指出的那样读取/解析文件,然后,为了解决您问题的另一部分,一旦地图位于向量中:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-14
      • 1970-01-01
      • 1970-01-01
      • 2020-10-06
      • 1970-01-01
      • 2016-03-26
      • 2017-06-26
      • 2021-10-31
      相关资源
      最近更新 更多