summary refs log tree commit diff stats
path: root/lib/pure/json.nim
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2018-03-30 02:32:29 +0200
committerAraq <rumpf_a@web.de>2018-03-30 02:32:29 +0200
commita9691aeef513ea20a9b1735f37172a1bd66a80dd (patch)
tree2d0de165d9907a3a8a4b56cea5bb33a3fb201465 /lib/pure/json.nim
parent9de05ec3e04e8a2321b29896fe9fa7db4c6e65f3 (diff)
parent325d76b56a5b26ba2d5ce065574eb6ef736eb179 (diff)
downloadNim-a9691aeef513ea20a9b1735f37172a1bd66a80dd.tar.gz
Merge branch 'devel' of github.com:nim-lang/Nim into devel
Diffstat (limited to 'lib/pure/json.nim')
-rw-r--r--lib/pure/json.nim10
1 files changed, 10 insertions, 0 deletions
diff --git a/lib/pure/json.nim b/lib/pure/json.nim
index 2b58d154e..912cd6837 100644
--- a/lib/pure/json.nim
+++ b/lib/pure/json.nim
@@ -964,6 +964,16 @@ proc `{}`*(node: JsonNode, keys: varargs[string]): JsonNode =
       return nil
     result = result.fields.getOrDefault(key)
 
+proc `{}`*(node: JsonNode, index: varargs[int]): JsonNode =
+  ## Traverses the node and gets the given value. If any of the
+  ## indexes do not exist, returns ``nil``. Also returns ``nil`` if one of the
+  ## intermediate data structures is not an array.
+  result = node
+  for i in index:
+    if isNil(result) or result.kind != JArray or i >= node.len:
+      return nil
+    result = result.elems[i]
+
 proc getOrDefault*(node: JsonNode, key: string): JsonNode =
   ## Gets a field from a `node`. If `node` is nil or not an object or
   ## value at `key` does not exist, returns nil