私は Nim で小さな Web サービスを作成しており、json でリクエストに応答する必要があります。jester モジュールを使用してサービスを作成しています。Nim の基本ライブラリの json モジュールを使用して、フィールドと値を持つある種のオブジェクトを構築し、それを json 文字列に変換できると思います。しかし、どのように?または、Nim で json を構築するためのより良い方法はありますか?
3257 次
4 に答える
26
marshal モジュールには、任意の型に対して機能する汎用の object-to-json シリアライゼーション アルゴリズムが含まれています (現在、ランタイム型のイントロスペクションを使用しています)。
import marshal
type
Person = object
age: int
name: string
var p = Person(age: 38, name: "Torbjørn")
echo($$p)
出力は次のようになります。
{"age": 38, "name": "Torbj\u00F8rn"}
于 2014-10-04T16:37:09.563 に答える
11
Nim では、json モジュールを使用してオブジェクト バリアントJsonNode
であるオブジェクトを作成します。これらは、newJObject()などの個々の proc で構築してから、シーケンスに入力できます。別のより迅速な方法は、タプルのシーケンスを受け入れる%() プロシージャを使用することです。1 つの値は json フィールドを持つ文字列で、もう 1 つは個々のです。fields
JsonNode
両方の方法を示す例を次に示します。
import json
type
Person = object ## Our generic person record.
age: int ## The age of the person.
name: string ## The name of the person.
proc `%`(p: Person): JsonNode =
## Quick wrapper around the generic JObject constructor.
result = %[("age", %p.age), ("name", %p.name)]
proc myCustomJson(p: Person): JsonNode =
## Custom method where we replicate manual construction.
result = newJObject()
# Initialize empty sequence with expected field tuples.
var s: seq[tuple[key: string, val: JsonNode]] = @[]
# Add the integer field tuple to the sequence of values.
s.add(("age", newJInt(p.age)))
# Add the string field tuple to the sequence of values.
s.add(("name", newJString(p.name)))
result.fields = s
proc test() =
# Tests making some jsons.
var p: Person
p.age = 24
p.name = "Minah"
echo(%p) # { "age": 24, "name": "Minah"}
p.age = 33
p.name = "Sojin"
echo(%p) # { "age": 33, "name": "Sojin"}
p.age = 40
p.name = "Britney"
echo p.myCustomJson # { "age": 40, "name": "Britney"}
when isMainModule: test()
于 2014-10-04T10:17:05.183 に答える
2
以下をせよ:
import json
var jsonResponse = %*
{"data": [{ "id": 35,
"type": "car",
"attributes": {"color":"red"} }]}
var body = ""
toUgly(body, jsonResponse)
echo body
于 2016-06-27T18:34:45.823 に答える