diff --git a/CHANGELOG.md b/CHANGELOG.md index be9be9f..f33bd68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ This project adheres to [Semantic Versioning](http://semver.org/) and - JSON-LD encoder can handle `RDF.Graph`s and `RDF.Description`s +### Changed + +- Use Jason instead of Poison for JSON encoding and decoding, since it's faster and more standard conform + [Compare v0.2.1...HEAD](https://github.com/marcelotto/jsonld-ex/compare/v0.2.1...HEAD) diff --git a/README.md b/README.md index 54a3bfa..241f2dd 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ end "homepage": "http://manu.sporny.org/" } """ -|> Poison.Parser.parse! +|> Jason.decode! |> JSON.LD.expand ``` @@ -67,7 +67,7 @@ produces ### Compact a document ```elixir -context = Poison.Parser.parse! """ +context = Jason.decode! """ { "@context": { "name": "http://xmlns.com/foaf/0.1/name", @@ -91,7 +91,7 @@ context = Poison.Parser.parse! """ } ] """ -|> Poison.Parser.parse! +|> Jason.decode! |> JSON.LD.compact(context) ``` diff --git a/lib/json/ld/decoder.ex b/lib/json/ld/decoder.ex index e6a049d..057e052 100644 --- a/lib/json/ld/decoder.ex +++ b/lib/json/ld/decoder.ex @@ -86,14 +86,12 @@ defmodule JSON.LD.Decoder do end end - # TODO: This should not be dependent on Poison as a JSON parser in general, - # but determine available JSON parsers and use one heuristically or by configuration def parse_json(content, _opts \\ []) do - Poison.Parser.parse(content) + Jason.decode(content) end def parse_json!(content, _opts \\ []) do - Poison.Parser.parse!(content) + Jason.decode!(content) end def node_to_rdf(nil), do: nil diff --git a/lib/json/ld/encoder.ex b/lib/json/ld/encoder.ex index 11dd2d5..63946ac 100644 --- a/lib/json/ld/encoder.ex +++ b/lib/json/ld/encoder.ex @@ -319,14 +319,12 @@ defmodule JSON.LD.Encoder do end - # TODO: This should not be dependent on Poison as a JSON encoder in general, - # but determine available JSON encoders and use one heuristically or by configuration defp encode_json(value, opts \\ []) do - Poison.encode(value) + Jason.encode(value) end defp encode_json!(value, opts \\ []) do - Poison.encode!(value) + Jason.encode!(value) end end diff --git a/mix.exs b/mix.exs index d385544..74054f4 100644 --- a/mix.exs +++ b/mix.exs @@ -60,7 +60,7 @@ defmodule JSON.LD.Mixfile do defp deps do [ {:rdf, "~> 0.4"}, - {:poison, "~> 3.0"}, + {:jason, "~> 1.0"}, {:dialyxir, "~> 0.4", only: [:dev, :test], runtime: false}, {:credo, "~> 0.6", only: [:dev, :test], runtime: false}, {:ex_doc, "~> 0.14", only: :dev, runtime: false}, diff --git a/mix.lock b/mix.lock index 5a81652..50e4c32 100644 --- a/mix.lock +++ b/mix.lock @@ -9,10 +9,10 @@ "exjsx": {:hex, :exjsx, "4.0.0", "60548841e0212df401e38e63c0078ec57b33e7ea49b032c796ccad8cde794b5c", [:mix], [{:jsx, "~> 2.8.0", [hex: :jsx, optional: false]}]}, "hackney": {:hex, :hackney, "1.11.0", "4951ee019df102492dabba66a09e305f61919a8a183a7860236c0fde586134b6", [:rebar3], [{:certifi, "2.0.0", [hex: :certifi, optional: false]}, {:idna, "5.1.0", [hex: :idna, optional: false]}, {:metrics, "1.0.1", [hex: :metrics, optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, optional: false]}, {:ssl_verify_fun, "1.1.1", [hex: :ssl_verify_fun, optional: false]}]}, "idna": {:hex, :idna, "5.1.0", "d72b4effeb324ad5da3cab1767cb16b17939004e789d8c0ad5b70f3cea20c89a", [:rebar3], [{:unicode_util_compat, "0.3.1", [hex: :unicode_util_compat, optional: false]}]}, + "jason": {:hex, :jason, "1.0.0", "0f7cfa9bdb23fed721ec05419bcee2b2c21a77e926bce0deda029b5adc716fe2", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, optional: true]}]}, "jsx": {:hex, :jsx, "2.8.3", "a05252d381885240744d955fbe3cf810504eb2567164824e19303ea59eef62cf", [:mix, :rebar3], []}, "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], []}, "mimerl": {:hex, :mimerl, "1.0.2", "993f9b0e084083405ed8252b99460c4f0563e41729ab42d9074fd5e52439be88", [:rebar3], []}, - "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], []}, "rdf": {:hex, :rdf, "0.4.0", "10db43f71931f95e3707a5a0357d46149e6c47be8ae83f17199ff296765891db", [:mix], []}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], []}, "unicode_util_compat": {:hex, :unicode_util_compat, "0.3.1", "a1f612a7b512638634a603c8f401892afbf99b8ce93a45041f8aaca99cadb85e", [:rebar3], []}, diff --git a/test/suite/from_rdf_test.exs b/test/suite/from_rdf_test.exs index 3cb415f..96b474d 100644 --- a/test/suite/from_rdf_test.exs +++ b/test/suite/from_rdf_test.exs @@ -49,6 +49,6 @@ defmodule JSON.LD.TestSuite.FromRdfTest do filename |> file |> File.read! - |> Poison.Parser.parse! + |> Jason.decode! end end diff --git a/test/support/test_suite.ex b/test/support/test_suite.ex index f775c10..50cc465 100644 --- a/test/support/test_suite.ex +++ b/test/support/test_suite.ex @@ -7,7 +7,7 @@ defmodule JSON.LD.TestSuite do def parse_json_file!(file) do case File.read(file(file)) do - {:ok, content} -> Poison.Parser.parse!(content) + {:ok, content} -> Jason.decode!(content) {:error, reason} -> raise File.Error, path: file, action: "read", reason: reason end end diff --git a/test/unit/compaction_test.exs b/test/unit/compaction_test.exs index a35b9df..c20455a 100644 --- a/test/unit/compaction_test.exs +++ b/test/unit/compaction_test.exs @@ -4,7 +4,7 @@ defmodule JSON.LD.CompactionTest do alias RDF.NS.{RDFS, XSD} test "Flattened form of a JSON-LD document (EXAMPLES 57-59 of https://www.w3.org/TR/json-ld/#compacted-document-form)" do - input = Poison.Parser.parse! """ + input = Jason.decode! """ [ { "http://xmlns.com/foaf/0.1/name": [ "Manu Sporny" ], @@ -16,7 +16,7 @@ defmodule JSON.LD.CompactionTest do } ] """ - context = Poison.Parser.parse! """ + context = Jason.decode! """ { "@context": { "name": "http://xmlns.com/foaf/0.1/name", @@ -27,7 +27,7 @@ defmodule JSON.LD.CompactionTest do } } """ - assert JSON.LD.compact(input, context) == Poison.Parser.parse! """ + assert JSON.LD.compact(input, context) == Jason.decode! """ { "@context": { "name": "http://xmlns.com/foaf/0.1/name", @@ -324,16 +324,16 @@ defmodule JSON.LD.CompactionTest do } }, "compact-0007" => %{ - input: Poison.Parser.parse!(""" + input: Jason.decode!(""" {"http://example.org/vocab#contains": "this-is-not-an-IRI"} """), - context: Poison.Parser.parse!(""" + context: Jason.decode!(""" { "ex": "http://example.org/vocab#", "ex:contains": {"@type": "@id"} } """), - output: Poison.Parser.parse!(""" + output: Jason.decode!(""" { "@context": { "ex": "http://example.org/vocab#", @@ -355,7 +355,7 @@ defmodule JSON.LD.CompactionTest do describe "@reverse" do %{ "compact-0033" => %{ - input: Poison.Parser.parse!(""" + input: Jason.decode!(""" [ { "@id": "http://example.com/people/markus", @@ -371,13 +371,13 @@ defmodule JSON.LD.CompactionTest do } ] """), - context: Poison.Parser.parse!(""" + context: Jason.decode!(""" { "name": "http://xmlns.com/foaf/0.1/name", "isKnownBy": { "@reverse": "http://xmlns.com/foaf/0.1/knows" } } """), - output: Poison.Parser.parse!(""" + output: Jason.decode!(""" { "@context": { "name": "http://xmlns.com/foaf/0.1/name", diff --git a/test/unit/expansion_test.exs b/test/unit/expansion_test.exs index 0429bfd..36e4f49 100644 --- a/test/unit/expansion_test.exs +++ b/test/unit/expansion_test.exs @@ -6,7 +6,7 @@ defmodule JSON.LD.ExpansionTest do alias RDF.NS.{RDFS, XSD} test "Expanded form of a JSON-LD document (EXAMPLE 55 and 56 of https://www.w3.org/TR/json-ld/#expanded-document-form)" do - input = Poison.Parser.parse! """ + input = Jason.decode! """ { "@context": { @@ -20,7 +20,7 @@ defmodule JSON.LD.ExpansionTest do "homepage": "http://manu.sporny.org/" } """ - assert JSON.LD.expand(input) == Poison.Parser.parse! """ + assert JSON.LD.expand(input) == Jason.decode! """ [ { "http://xmlns.com/foaf/0.1/name": [ @@ -540,7 +540,7 @@ defmodule JSON.LD.ExpansionTest do }] }, "expand-0004" => %{ - input: Poison.Parser.parse!(~s({ + input: Jason.decode!(~s({ "@context": { "mylist1": {"@id": "http://example.com/mylist1", "@container": "@list"}, "mylist2": {"@id": "http://example.com/mylist2", "@container": "@list"}, @@ -549,7 +549,7 @@ defmodule JSON.LD.ExpansionTest do }, "http://example.org/property": { "@list": "one item" } })), - output: Poison.Parser.parse!(~s([ + output: Jason.decode!(~s([ { "http://example.org/property": [ { @@ -700,7 +700,7 @@ defmodule JSON.LD.ExpansionTest do describe "@reverse" do %{ "expand-0037" => %{ - input: Poison.Parser.parse!(~s({ + input: Jason.decode!(~s({ "@context": { "name": "http://xmlns.com/foaf/0.1/name" }, @@ -713,7 +713,7 @@ defmodule JSON.LD.ExpansionTest do } } })), - output: Poison.Parser.parse!(~s([ + output: Jason.decode!(~s([ { "@id": "http://example.com/people/markus", "@reverse": { @@ -737,7 +737,7 @@ defmodule JSON.LD.ExpansionTest do ])) }, "expand-0043" => %{ - input: Poison.Parser.parse!(~s({ + input: Jason.decode!(~s({ "@context": { "name": "http://xmlns.com/foaf/0.1/name", "isKnownBy": { "@reverse": "http://xmlns.com/foaf/0.1/knows" } @@ -757,7 +757,7 @@ defmodule JSON.LD.ExpansionTest do ] } })), - output: Poison.Parser.parse!(~s([ + output: Jason.decode!(~s([ { "@id": "http://example.com/people/markus", "http://xmlns.com/foaf/0.1/knows": [ @@ -870,7 +870,7 @@ defmodule JSON.LD.ExpansionTest do }, "@reverse object with an @id property" => %{ - input: Poison.Parser.parse!(~s({ + input: Jason.decode!(~s({ "@id": "http://example/foo", "@reverse": { "@id": "http://example/bar" @@ -879,7 +879,7 @@ defmodule JSON.LD.ExpansionTest do exception: JSON.LD.InvalidReversePropertyMapError, }, "colliding keywords" => %{ - input: Poison.Parser.parse!(~s({ + input: Jason.decode!(~s({ "@context": { "id": "@id", "ID": "@id" diff --git a/test/unit/flattening_test.exs b/test/unit/flattening_test.exs index 2984788..88de6cd 100644 --- a/test/unit/flattening_test.exs +++ b/test/unit/flattening_test.exs @@ -4,7 +4,7 @@ defmodule JSON.LD.FlatteningTest do alias RDF.NS.RDFS test "Flattened form of a JSON-LD document (EXAMPLE 60 and 61 of https://www.w3.org/TR/json-ld/#flattened-document-form)" do - input = Poison.Parser.parse! """ + input = Jason.decode! """ { "@context": { "name": "http://xmlns.com/foaf/0.1/name", @@ -23,7 +23,7 @@ defmodule JSON.LD.FlatteningTest do ] } """ - assert JSON.LD.flatten(input, input) == Poison.Parser.parse! """ + assert JSON.LD.flatten(input, input) == Jason.decode! """ { "@context": { "name": "http://xmlns.com/foaf/0.1/name", @@ -107,7 +107,7 @@ defmodule JSON.LD.FlatteningTest do ] }, "reverse properties" => %{ - input: Poison.Parser.parse!(""" + input: Jason.decode!(""" [ { "@id": "http://example.com/people/markus", @@ -125,7 +125,7 @@ defmodule JSON.LD.FlatteningTest do } ] """), - output: Poison.Parser.parse!(""" + output: Jason.decode!(""" [ { "@id": "http://example.com/people/dave", @@ -155,7 +155,7 @@ defmodule JSON.LD.FlatteningTest do """) }, "Simple named graph (Wikidata)" => %{ - input: Poison.Parser.parse!(""" + input: Jason.decode!(""" { "@context": { "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", @@ -187,7 +187,7 @@ defmodule JSON.LD.FlatteningTest do ] } """), - output: Poison.Parser.parse!(""" + output: Jason.decode!(""" [{ "@id": "http://example.org/ParisFact1", "@type": ["http://www.w3.org/1999/02/22-rdf-syntax-ns#Graph"], @@ -212,7 +212,7 @@ defmodule JSON.LD.FlatteningTest do """) }, "Test Manifest (shortened)" => %{ - input: Poison.Parser.parse!(""" + input: Jason.decode!(""" { "@id": "", "http://example/sequence": {"@list": [ @@ -224,7 +224,7 @@ defmodule JSON.LD.FlatteningTest do ]} } """), - output: Poison.Parser.parse!(""" + output: Jason.decode!(""" [{ "@id": "", "http://example/sequence": [{"@list": [{"@id": "#t0001"}]}] @@ -237,7 +237,7 @@ defmodule JSON.LD.FlatteningTest do options: %{} }, "@reverse bnode issue (0045)" => %{ - input: Poison.Parser.parse!(""" + input: Jason.decode!(""" { "@context": { "foo": "http://example.org/foo", @@ -247,7 +247,7 @@ defmodule JSON.LD.FlatteningTest do "bar": [ "http://example.org/origin", "_:b0" ] } """), - output: Poison.Parser.parse!(""" + output: Jason.decode!(""" [ { "@id": "_:b0", diff --git a/test/unit/iri_compaction_test.exs b/test/unit/iri_compaction_test.exs index 90a77ea..41a9ae8 100644 --- a/test/unit/iri_compaction_test.exs +++ b/test/unit/iri_compaction_test.exs @@ -210,7 +210,7 @@ defmodule JSON.LD.IRICompactionTest do describe "compact-0018" do setup do - context = JSON.LD.context(Poison.Parser.parse! """ + context = JSON.LD.context(Jason.decode! """ { "id1": "http://example.com/id1", "type1": "http://example.com/t1", @@ -324,7 +324,7 @@ defmodule JSON.LD.IRICompactionTest do do: [values], else: values Enum.each(values, fn value -> - value = Poison.Parser.parse!(value) + value = Jason.decode!(value) @tag data: {term, value} test "uses #{term} for #{inspect value, limit: 3}", %{data: {term, value}, example_context: context,