JSON decoding with field-level errors in Nim
Nim
import std/json
proc parseUser(body: string): tuple[name: string, age: int] =
var node: JsonNode
try:
node = parseJson(body)
except JsonParsingError as e:
raise newException(ValueError, "invalid JSON: " & e.msg)
if node.kind != JObject:
raise newException(ValueError, "expected object, got " & $node.kind)
for field in ["name", "age"]:
if not node.hasKey(field):
raise newException(ValueError, "missing field: " & field)
if node["name"].kind != JString or node["age"].kind != JInt:
raise newException(ValueError, "wrong field type")
(name: node["name"].getStr, age: node["age"].getInt)
echo parseUser("""{"name": "ada", "age": 36}""")