@@ -12,147 +12,56 @@ An implementation of [JSON Pointer (RFC 6901)](http://tools.ietf.org/html/draft-
1212Add a dependency to your project ` mix.exs ` :
1313
1414``` Elixir
15-
1615def deps do
1716 [{:odgn_json_pointer , " ~> 2.5" }]
1817end
19-
2018```
2119
22- Then update your dependencies:
23-
24- ``` sh-session
25- $ mix deps.get
26- ```
27-
28-
29- ## API
30-
31- ### JSONPointer.get(object, pointer)
32-
33- Retrieves the value indicated by the pointer from the object
20+ ## Basic Usage
3421
3522``` Elixir
36- JSONPointer .get ( %{ " fridge" => %{ " door" => " milk" } }, " /fridge/door" )
37- # => {:ok, "milk"}
38- ```
23+ iex> JSONPointer .get ( %{ " fridge" => %{ " door" => " milk" } }, " /fridge/door" )
24+ {:ok , " milk" }
3925
40- ### JSONPointer.get!(object,pointer)
4126
42- Retrieves the value indicated by the pointer from the object, and raises an error if not found
27+ iex> JSONPointer .set ( %{}, " /example/msg" , " hello" )
28+ {:ok , %{ " example" => %{ " msg" => " hello" }}, nil }
4329
44- ``` Elixir
45- JSONPointer .get! ( %{}, " /fridge/milk" )
46- ** (ArgumentError ) json pointer key not found: fridge
47- ```
4830
49- ### JSONPointer.set(object, pointer, value)
31+ iex> JSONPointer .add ( %{ " fridge" => [ " milk" , " cheese" ]}, " /fridge/1" , " salad" )
32+ {:ok , %{ " fridge" => [ " milk" , " salad" , " cheese" ]}, [ " milk" , " cheese" ] }
5033
51- Sets the value indicated by the pointer in the object
5234
53- ``` Elixir
54- JSONPointer .set ( %{}, " /example/msg" , " hello" )
55- # => {:ok, %{ "example" => %{ "msg" => "hello" }}, nil }
56- ```
35+ iex> JSONPointer .has? ( %{ " milk" => true , " butter" => false }, " /butter" )
36+ true
5737
58- ### JSONPointer.set!(object, pointer, value)
5938
60- Sets the value indicated by the pointer in the object, raises an exception on error
39+ iex> JSONPointer .test ( %{ " milk" => " skimmed" , " butter" => false }, " /milk" , " skimmed" )
40+ {:ok , %{ " milk" => " skimmed" , " butter" => false } }
6141
62- ``` Elixir
63- JSONPointer .set! ( %{}, " /example/msg" , " hello" )
64- # => %{ "example" => %{ "msg" => "hello" }}
65- ```
6642
67- ### JSONPointer.dehydrate(object)
43+ iex> JSONPointer .remove ( %{" fridge" => %{ " milk" => true , " butter" => true }}, " /fridge/butter" )
44+ {:ok , %{" fridge" => %{" milk" => true }}, true }
6845
69- Returns an array of JSON pointer paths mapped to their values
7046
71- ``` Elixir
72- JSONPointer .dehydrate ( %{" a" => %{" b" => [" c" ," d" ]}} )
73- # => {:ok, [{"/a/b/0", "c"}, {"/a/b/1", "d"}] }
74- ```
47+ iex> JSONPointer .dehydrate ( %{" a" => %{" b" => [" c" ," d" ]}} )
48+ {:ok , [{" /a/b/0" , " c" }, {" /a/b/1" , " d" }] }
7549
76- ### JSONPointer.dehydrate!(object)
7750
78- Returns an array of JSON pointer paths mapped to their values, raises an exception on error
51+ iex> iex> JSONPointer .hydrate ( [ {" /a/1/b" , " single" } ] )
52+ {:ok , %{" a" => %{" 1" => %{" b" => " single" }}}}
7953
80- ``` Elixir
81- JSONPointer .dehydrate! ( %{" a" => %{" b" => [" c" ," d" ]}} )
82- # => [{"/a/b/0", "c"}, {"/a/b/1", "d"}]
83- ```
8454
85- ### JSONPointer.hydrate(container, paths)
55+ iex> JSONPointer .merge ( %{" a" => 1 }, %{" b" => 2 } )
56+ {:ok , %{" a" => 1 ," b" => 2 } }
8657
87- Applies the given list of paths to the given container
8858
89- ``` Elixir
90- iex> JSONPointer .hydrate ( [ {" /a/1/b" , " single" } ] )
91- # => {:ok, %{"a" => %{"1" => %{"b" => "single"}}}}
92- ```
59+ iex> JSONPointer .transform ( %{ " a" => 4 , " b" => %{ " c" => true }}, [ {" /b/c" , " /valid" }, {" /a" ," /count" , fn val -> val* 2 end } ] )
60+ {:ok , %{" count" => 8 , " valid" => true }}
9361
94- ### JSONPointer.hydrate!(container, paths)
95-
96- Applies the given list of paths to the given container, raises an exception on error
97-
98- ``` Elixir
99- iex> JSONPointer .hydrate! ( %{}, [ {" /a/b/1" , " find" } ] )
100- # => {:ok, %{"a"=>%{"b"=>[nil,"find"]} } }
10162```
10263
103- ### JSONPointer.merge(src,dst)
104-
105- Merges the dst container into src
106-
107- ``` Elixir
108- JSONPointer .merge ( %{" a" => 1 }, %{" b" => 2 } )
109- # => {:ok, %{"a"=>1,"b"=>2} }
110- ```
111-
112- ### JSONPointer.merge!(src,dst)
113-
114- Merges the dst container into src, raises an exception on error
115-
116- ``` Elixir
117- JSONPointer .merge! ( %{" a" => 1 }, %{" b" => 2 } )
118- # => %{"a"=>1,"b"=>2}
119- ```
120-
121- ### JSONPointer.has(object, pointer)
122-
123- Returns true if the given value exists in the object indicated by the pointer
124-
125- ``` Elixir
126- JSONPointer .has ( %{ " milk" => true , " butter" => false }, " /butter" )
127- # => true
128- ```
129-
130- ### JSONPointer.remove(object, pointer)
131-
132- Removes the value from the object indicated by the pointer
133-
134- ``` Elixir
135- JSONPointer .remove ( %{" fridge" => %{ " milk" => true , " butter" => true }}, " /fridge/butter" )
136- # => {:ok, %{"fridge" => %{"milk"=>true}}, true }
137- ```
138-
139- ### JSONPointer.transform(src,mapping)
140-
141- Applies a mapping of source paths to destination paths in the result
142-
143- ``` Elixir
144- JSONPointer .transform ( %{ " a" => 4 , " b" => %{ " c" => true }}, [ {" /b/c" , " /valid" }, {" /a" ," /count" , fn val -> val* 2 end } ] )
145- # => {:ok, %{"count" => 8, "valid" => true}}
146- ```
147-
148- ### JSONPointer.transform!(src,mapping)
149-
150- Applies a mapping of source paths to destination paths in the result, raises an error on exception
151-
152- ``` Elixir
153- JSONPointer .transform! ( %{ " a" => 5 , " b" => %{ " is_valid" => true }}, [ {" /b/is_valid" , " /valid" }, {" /a" ," /count" , fn val -> val* 2 end } ] )
154- # => %{"count" => 10, "valid" => true}
155- ```
64+ Full documentation can be found at https://hexdocs.pm/odgn_json_pointer .
15665
15766
15867
0 commit comments