Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Clojure中将列表转换为JSON?_Json_Clojure - Fatal编程技术网

如何在Clojure中将列表转换为JSON?

如何在Clojure中将列表转换为JSON?,json,clojure,Json,Clojure,我有一个如下的列表,一些排序数据,列表按顺序排列: '(John Kelly Daniel) 并希望将其转换为JSON,如下所示: [{"rank":1, "name":"John"},{"rank":2, "name":"Kelly"},{"rank":3, "name":"Daniel"}] 最后使用json/write str做这件事的最简单和最简单的方法是什么?作为@leetwinski answer的补充,并使用他们的代码 (ns some-thing.core (:requi

我有一个如下的列表,一些排序数据,列表按顺序排列:

'(John Kelly Daniel)
并希望将其转换为JSON,如下所示:

[{"rank":1, "name":"John"},{"rank":2, "name":"Kelly"},{"rank":3, "name":"Daniel"}]

最后使用json/write str做这件事的最简单和最简单的方法是什么?

作为@leetwinski answer的补充,并使用他们的代码

(ns some-thing.core
  (:require [cheshire.core :refer :all]))

(def names '(John Kelly Daniel))

(defn add-rank [data]
  (map-indexed #(hash-map :rank (inc %1) :name (str %2)) data))

(-> names
    add-rank
    generate-string)

作为@leetwinski答案的补充,并使用其代码

(ns some-thing.core
  (:require [cheshire.core :refer :all]))

(def names '(John Kelly Daniel))

(defn add-rank [data]
  (map-indexed #(hash-map :rank (inc %1) :name (str %2)) data))

(-> names
    add-rank
    generate-string)
您可以使用mapv创建具有一个等级和一个名称的映射,并使用库cheshire将向量转换为json。在Clojure中为数据使用列表被认为是不习惯的,因此我建议您使用向量

(ns rankifier.core
  (:require [cheshire.core :refer [generate-string]]))

(defn rankify [names]
  (mapv #(hash-map :name %1 :rank %2)
        names
        (range 1 (inc (count names)))))
在名称空间声明中,我们只需要函数generate string of cheshire。 然后我们定义函数rankify,它以一个向量名称作为参数,并返回一个哈希映射向量,每个哈希映射包含一个名称和一个秩,其中第一个名称的秩为1,第二个名称的秩为2,依此类推,对于所有给定的名称

我们可以这样尝试,使用thread first宏:

rankifier.core> (-> ["John" "Kelly" "Daniel"]
                    rankify
                    generate-string)
"[{\"name\":\"John\",\"rank\":1},{\"name\":\"Kelly\",\"rank\":2},    {\"name\":\"Daniel\",\"rank\":3}]"
如果我们不将其转换为json,结果如下所示:

rankifier.core> (rankify ["John" "Kelly" "Daniel"])
[{:name "John", :rank 1} {:name "Kelly", :rank 2} {:name "Daniel", :rank 3}]
这适用于任意数量的名称:

(rankify ["John" "Kelly" "Daniel" "Maria" "Billy" "Amy"])
[{:name "John", :rank 1}
 {:name "Kelly", :rank 2}
 {:name "Daniel", :rank 3}
 {:name "Maria", :rank 4}
 {:name "Billy", :rank 5}
 {:name "Amy", :rank 6}]
您可以使用mapv创建具有一个等级和一个名称的映射,并使用库cheshire将向量转换为json。在Clojure中为数据使用列表被认为是不习惯的,因此我建议您使用向量

(ns rankifier.core
  (:require [cheshire.core :refer [generate-string]]))

(defn rankify [names]
  (mapv #(hash-map :name %1 :rank %2)
        names
        (range 1 (inc (count names)))))
在名称空间声明中,我们只需要函数generate string of cheshire。 然后我们定义函数rankify,它以一个向量名称作为参数,并返回一个哈希映射向量,每个哈希映射包含一个名称和一个秩,其中第一个名称的秩为1,第二个名称的秩为2,依此类推,对于所有给定的名称

我们可以这样尝试,使用thread first宏:

rankifier.core> (-> ["John" "Kelly" "Daniel"]
                    rankify
                    generate-string)
"[{\"name\":\"John\",\"rank\":1},{\"name\":\"Kelly\",\"rank\":2},    {\"name\":\"Daniel\",\"rank\":3}]"
如果我们不将其转换为json,结果如下所示:

rankifier.core> (rankify ["John" "Kelly" "Daniel"])
[{:name "John", :rank 1} {:name "Kelly", :rank 2} {:name "Daniel", :rank 3}]
这适用于任意数量的名称:

(rankify ["John" "Kelly" "Daniel" "Maria" "Billy" "Amy"])
[{:name "John", :rank 1}
 {:name "Kelly", :rank 2}
 {:name "Daniel", :rank 3}
 {:name "Maria", :rank 4}
 {:name "Billy", :rank 5}
 {:name "Amy", :rank 6}]
类似这样的内容:映射索引哈希映射:rank inc%1:name str%2'John Kelly Daniel,然后将其传递给json/write string,但我建议您先阅读语言基础知识,类似这样的内容:映射索引哈希映射:rank inc%1:name str%2'John Kelly Daniel,然后将其传递给json/write string,但我建议您先阅读语言基础知识