私は以下のようなリスト持っている(ランキングデータのいくつかの並べ替えを、リストが順番にある):ClojureでリストをJSONに変換するには?
'(John Kelly Daniel)
と以下のようにJSONに変換したい:
[{"rank":1, "name":"John"},{"rank":2, "name":"Kelly"},{"rank":3, "name":"Daniel"}]
一番簡単だろう何最後にjson/write-strを使ってこれを行う簡単な方法は?
私は以下のようなリスト持っている(ランキングデータのいくつかの並べ替えを、リストが順番にある):ClojureでリストをJSONに変換するには?
'(John Kelly Daniel)
と以下のようにJSONに変換したい:
[{"rank":1, "name":"John"},{"rank":2, "name":"Kelly"},{"rank":3, "name":"Daniel"}]
一番簡単だろう何最後にjson/write-strを使ってこれを行う簡単な方法は?
(およびそのコードを使用して)
(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)
あなたはにベクトルを変換するために、1つのランクと1名、およびライブラリチェシャーでマップを作成するためにmapv
を使ってこれを行うことができますjson。 Clojureでデータのリストを使うのは慣用的なものではないので、代わりにベクトルを使うことをお勧めします。我々は唯一のチェシャーの機能generate-string
を必要とする名前空間宣言で
(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)))))
。 次に、関数rankify
を定義します。ベクトルnames
を引数とし、名前とランクを含むハッシュマップのベクトルを返します。第1の名前のランクは1、第2の名前のランクは2、与えられたすべての名前のように。
我々はスレッド最初のマクロを使用して、このようにそれを試してみることができます:
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}]
これは名前の任意の数の作品: `(マップインデックス#(ハッシュマップ:ランク(INC%1):このような
(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}]
何か名前(文字列%2))「(ジョン・ケリーダンiel)) 'を実行し、' json/write-string'に渡しますが、最初に言語の基本を読むことをアドバイスします – leetwinski