Skip to content

Commit

Permalink
Merge pull request #12 from boudra/fix/empty-string-key-path
Browse files Browse the repository at this point in the history
Handle empty strings as keys properly
  • Loading branch information
boudra committed Feb 16, 2019
2 parents 47f7cf5 + 3d4f452 commit fb638f7
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 1 deletion.
4 changes: 4 additions & 0 deletions lib/jaxon/path.ex
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,10 @@ defmodule Jaxon.Path do
"[#{i}]"
end

defp do_encode_segment("") do
~s("")
end

defp do_encode_segment(s) when is_binary(s) do
if(String.contains?(s, ["*", "$", "]", "[", ".", "\""])) do
"\"#{String.replace(s, "\"", "\\\"")}\""
Expand Down
1 change: 1 addition & 0 deletions test/jaxon_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ defmodule JaxonTest do
test "objects" do
assert decode!(~s({})) == %{}
assert decode!(~s({"number": 2})) == %{"number" => 2}
assert decode!(~s({"": 2})) == %{"" => 2}
assert decode!(~s({"nested": {}})) == %{"nested" => %{}}
assert decode!(~s({"nested": {"nested": 2}})) == %{"nested" => %{"nested" => 2}}
end
Expand Down
3 changes: 2 additions & 1 deletion test/path_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ defmodule JaxonPathTest do
assert encode!([:root, :all]) == "$[*]"
assert encode!([:root, :all, :all]) == "$[*][*]"
assert encode!([:root, "$", :all]) == "$.\"$\"[*]"
assert encode!([:root, "", :all]) == "$[*]"
assert encode!([:root, "", :all]) == ~s($.""[*])

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

assert_raise(ParseError, ~r/Ending quote not found.*/, fn ->
parse!("$.\"nested.0")
Expand Down
2 changes: 2 additions & 0 deletions test/stream_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ defmodule JaxonEventStreamTest do
"empty_array": [],
"empty_object": {},
"bool1": true,
"": "empty",
"bool2": false,
"null": null,
"person": {
Expand All @@ -49,6 +50,7 @@ defmodule JaxonEventStreamTest do
stream = Util.chunk_binary(@json_stream, chunk_size)

assert [1] == query(stream, "$.numbers[0]")
assert ["empty"] == query(stream, ~s($.""))
assert [nil] == query(stream, "$.null")
assert [2] == query(stream, "$.numbers[1]")
assert [[1, 2, -1]] == query(stream, "$.numbers")
Expand Down

0 comments on commit fb638f7

Please sign in to comment.