Skip to content

Commit fb638f7

Browse files
authored
Merge pull request #12 from boudra/fix/empty-string-key-path
Handle empty strings as keys properly
2 parents 47f7cf5 + 3d4f452 commit fb638f7

File tree

4 files changed

+9
-1
lines changed

4 files changed

+9
-1
lines changed

lib/jaxon/path.ex

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,10 @@ defmodule Jaxon.Path do
210210
"[#{i}]"
211211
end
212212

213+
defp do_encode_segment("") do
214+
~s("")
215+
end
216+
213217
defp do_encode_segment(s) when is_binary(s) do
214218
if(String.contains?(s, ["*", "$", "]", "[", ".", "\""])) do
215219
"\"#{String.replace(s, "\"", "\\\"")}\""

test/jaxon_test.exs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ defmodule JaxonTest do
6363
test "objects" do
6464
assert decode!(~s({})) == %{}
6565
assert decode!(~s({"number": 2})) == %{"number" => 2}
66+
assert decode!(~s({"": 2})) == %{"" => 2}
6667
assert decode!(~s({"nested": {}})) == %{"nested" => %{}}
6768
assert decode!(~s({"nested": {"nested": 2}})) == %{"nested" => %{"nested" => 2}}
6869
end

test/path_test.exs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ defmodule JaxonPathTest do
1111
assert encode!([:root, :all]) == "$[*]"
1212
assert encode!([:root, :all, :all]) == "$[*][*]"
1313
assert encode!([:root, "$", :all]) == "$.\"$\"[*]"
14-
assert encode!([:root, "", :all]) == "$[*]"
14+
assert encode!([:root, "", :all]) == ~s($.""[*])
1515

1616
assert_raise(EncodeError, "`:whoops` is not a valid JSON path segment", fn ->
1717
encode!([:root, :whoops, "test", 0])
@@ -26,6 +26,7 @@ defmodule JaxonPathTest do
2626
assert parse!("$.\"nested\"[0]") == [:root, "nested", 0]
2727
assert parse!("$.\"nested\".0") == [:root, "nested", "0"]
2828
assert parse!("$.\"$\".0") == [:root, "$", "0"]
29+
assert parse!(~s($.""[0])) == [:root, "", 0]
2930

3031
assert_raise(ParseError, ~r/Ending quote not found.*/, fn ->
3132
parse!("$.\"nested.0")

test/stream_test.exs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ defmodule JaxonEventStreamTest do
2424
"empty_array": [],
2525
"empty_object": {},
2626
"bool1": true,
27+
"": "empty",
2728
"bool2": false,
2829
"null": null,
2930
"person": {
@@ -49,6 +50,7 @@ defmodule JaxonEventStreamTest do
4950
stream = Util.chunk_binary(@json_stream, chunk_size)
5051

5152
assert [1] == query(stream, "$.numbers[0]")
53+
assert ["empty"] == query(stream, ~s($.""))
5254
assert [nil] == query(stream, "$.null")
5355
assert [2] == query(stream, "$.numbers[1]")
5456
assert [[1, 2, -1]] == query(stream, "$.numbers")

0 commit comments

Comments
 (0)