anchor.diff:          , remove/2
           , size/1
           , values/1
  +        , find_in_list/3
           ]).
   
   %% Conversions
  
positive.code:                    <<"foo">> => <<"bar">>, <<"name">> => <<"John">>,
                     <<"surname">> => <<"Doe">>,<<"empty">> => null}).
  
  %% expand_inline tests
  expand_inline_test_() ->
      {inparallel,
  
negative.code: %% ===================================================================
  %% Other Exported functions
  %% ===================================================================
  
  %% @doc Scan a list of json objects, find the first occurence with the 
  %% given property return the value.
  %% Return the Default if property is not found.
  -spec find_in_list(string() | atom() | binary(), [jsx:json_term()], jsx:json_term()) -> jsx:json_term().
  find_in_list(Property, _DataObjects, _Default)
    when not (is_atom(Property) orelse
              (is_binary(Property) andalso byte_size(Property) > 0) orelse
              (is_list(Property) andalso length(Property) > 0)) ->
      error(bad_property);
  find_in_list(_Property, DataObjects, _Default)
    when not is_list(DataObjects) ->
      error(bad_object);
  find_in_list(_Property, [], Default)  -> Default;
  find_in_list(Property, [DO|DataObjects], Default) when is_binary(DO) ->
      find_in_list(Property, [jsx:decode(DO, [return_maps])|DataObjects], Default);
  find_in_list(Property, [DO|DataObjects], Default) when is_list(DO), is_binary(Property) ->
      case lists:keyfind(Property, 1, DO) of
          {_,VB} ->    VB;
          false ->    
              case lists:keyfind(binary_to_list(Property), 1, DO) of
                  {_,VL} ->   VL;
                  false ->    find_in_list(Property, DataObjects, Default)
              end
      end;
  find_in_list(Property, [DO|DataObjects], Default) when is_list(DO), is_list(Property) ->
      case lists:keyfind(Property, 1, DO) of
          {_,VL} ->    VL;
          false ->    
              case lists:keyfind(list_to_binary(Property), 1, DO) of
                  {_,VB} ->   VB;
                  false ->    find_in_list(Property, DataObjects, Default)
              end
      end;
  find_in_list(Property, [DO|DataObjects], Default) when is_list(DO), is_atom(Property) ->
      case lists:keyfind(Property, 1, DO) of
          {_,VA} ->    VA;
          false ->    
              case lists:keyfind(atom_to_list(Property), 1, DO) of
                  {_,VL} ->   VL;                
                  false ->    
                      case lists:keyfind(list_to_binary(atom_to_list(Property)), 1, DO) of
                          {_,VB} ->   VB;
                          false ->    find_in_list(Property, DataObjects, Default)
                      end
              end
      end;
  find_in_list(Property, [DO|DataObjects], Default) when is_map(DO), is_binary(Property) ->
      case maps:is_key(Property, DO) of
          true ->     maps:get(Property, DO);
          false ->
              case maps:is_key(binary_to_list(Property), DO) of 
                  true ->    maps:get(binary_to_list(Property), DO);
                  false ->   find_in_list(Property, DataObjects, Default)
              end
      end;
  find_in_list(Property, [DO|DataObjects], Default) when is_map(DO), is_list(Property) ->
      case maps:is_key(Property, DO) of
          true ->     maps:get(Property, DO);
          false ->
              case maps:is_key(list_to_binary(Property), DO) of 
                  true ->    maps:get(list_to_binary(Property), DO);
                  false ->   find_in_list(Property, DataObjects, Default)
              end
      end;
  find_in_list(Property, [DO|DataObjects], Default) when is_map(DO), is_atom(Property) ->
      case maps:is_key(Property, DO) of
          true ->     maps:get(Property, DO);
          false ->
              case maps:is_key(atom_to_list(Property), DO) of 
                  true ->    maps:get(atom_to_list(Property), DO);
                  false ->   
                      case maps:is_key(list_to_binary(atom_to_list(Property)), DO) of
                          true -> maps:get(list_to_binary(atom_to_list(Property)), DO);
                          false -> find_in_list(Property, DataObjects, Default)
                      end
              end
      end.
            
  %% @doc Find the value of a property and return in matching erlang type
  %% throw exception if property not found.
  -define(JRENUMBR, "(-?(0|[1-9]\\d*)(\.\\d+)?([eE][+-]?\\d+)?)").
  