From ceebb0943bc335de26e38f15df82a404df2795b0 Mon Sep 17 00:00:00 2001 From: Matthew O'Gorman Date: Mon, 29 Apr 2019 14:31:54 -0400 Subject: [PATCH 1/3] be nice to get all keys of an object like you do an array --- lib/jaxon/stream.ex | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/jaxon/stream.ex b/lib/jaxon/stream.ex index c74b71c..b776127 100644 --- a/lib/jaxon/stream.ex +++ b/lib/jaxon/stream.ex @@ -209,6 +209,12 @@ defmodule Jaxon.Stream do {:yield, "", &query_object(query, acc, [{:string, key} | &1])} end + defp query_object(query = [:all | rest_query], acc, [{:string, _key} | events]) do + with {:ok, events, acc} <- Decoder.events_expect(events, :colon, acc) do + append_object_value(query_value(rest_query, acc, events), query, acc) + end + end + defp query_object([key | query], acc, [{:string, key} | events]) do with {:ok, events, acc} <- Decoder.events_expect(events, :colon, acc) do append_object_value(query_value(query, acc, events), query, acc) From 4e3cefd0165467558c71ddba4e213e8d9a9f58b7 Mon Sep 17 00:00:00 2001 From: Matthew O'Gorman Date: Mon, 29 Apr 2019 14:54:28 -0400 Subject: [PATCH 2/3] debugging --- lib/jaxon/stream.ex | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/jaxon/stream.ex b/lib/jaxon/stream.ex index b776127..e5af3dd 100644 --- a/lib/jaxon/stream.ex +++ b/lib/jaxon/stream.ex @@ -74,6 +74,8 @@ defmodule Jaxon.Stream do end def query_value(query, acc, [:start_object | events]) do + IO.puts("query #{inspect(query)}") + IO.puts("acc #{inspect(acc)}") query_object(query, acc, events) end From 4024597922406874248f96a30464c315d1258e25 Mon Sep 17 00:00:00 2001 From: Matthew O'Gorman Date: Wed, 1 May 2019 08:30:40 -0400 Subject: [PATCH 3/3] put the object key in the sub object so that the name is not lost --- lib/jaxon/stream.ex | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/jaxon/stream.ex b/lib/jaxon/stream.ex index e5af3dd..6c77db2 100644 --- a/lib/jaxon/stream.ex +++ b/lib/jaxon/stream.ex @@ -74,8 +74,6 @@ defmodule Jaxon.Stream do end def query_value(query, acc, [:start_object | events]) do - IO.puts("query #{inspect(query)}") - IO.puts("acc #{inspect(acc)}") query_object(query, acc, events) end @@ -211,8 +209,11 @@ defmodule Jaxon.Stream do {:yield, "", &query_object(query, acc, [{:string, key} | &1])} end - defp query_object(query = [:all | rest_query], acc, [{:string, _key} | events]) do + defp query_object(query = [:all | rest_query], acc, [{:string, key} | events]) do with {:ok, events, acc} <- Decoder.events_expect(events, :colon, acc) do + new_key = [{:string, "object_key_id"}, :colon, {:string, key}] + [start_object | rest] = events + events = [start_object] ++ new_key ++ rest append_object_value(query_value(rest_query, acc, events), query, acc) end end