2016-11-02 1 views
0

J'utilise HTTPoison pour obtenir le site Web du guide elixir, puis l'analyser avec Floki pour construire un transformateur pour ordinateur portable HTML 2 Jupyter (avec Markdown pour la description). Je dois mettre dans le `backtick. \u0060 pour la mise en évidence de code, qui fonctionne jusqu'à présent. J'ai quelques endroits où j'emploie la chaîne Interpolation et dans d'autres endroits Enum.join "" pour traiter et transformer du HTML au Markdown.Encodage json utilisant du poison avec unicode

Le résultat transformé est stocké dans une carte en fonction du format cahier jupyter. Quand j'appelle Poison.encode notebook, j'obtiens une erreur, car les points de code ont disparu. J'ai essayé différentes choses, mais je ne sais pas encore, où est le problème.

Des allusions à ce que je fais mal lors du traitement du texte? Ceci est l'exception:

** (Poison.EncodeError) unable to encode value: {:source, ["Elixir also provides `Port`, `Reference` and `PID` as data types (usually used in process communication), and we will take a quick look at them when talking about processes. For now, let’s take a look at some of the basic operators that go with our basic types."]} 
lib/poison/encoder.ex:377: Poison.Encoder.Any.encode/2 
lib/poison/encoder.ex:255: anonymous fn/3 in Poison.Encoder.List.encode/3 
lib/poison/encoder.ex:256: Poison.Encoder.List."-encode/3-lists^foldr/2-1-"/3 
lib/poison/encoder.ex:256: Poison.Encoder.List.encode/3 
lib/poison.ex:41: Poison.encode!/2 
(guide2nb) lib/cli.ex:27: CLI.process/1 
(elixir) lib/kernel/cli.ex:76: anonymous fn/3 in Kernel.CLI.exec_fun/2 
+0

La valeur que vous essayez de coder ne ressemble pas à une carte, mais à un tuple. Collez votre valeur d'origine ici (et/ou le code qui essaie de l'encoder) – Sheharyar

+0

Poison n'encode pas les tuples. –

Répondre

2

Le problème ici est que vous essayez d'encoder un Tuple, alors que Poison fonctionne uniquement avec des cartes et des listes. Si la valeur que vous essayiez d'encoder était une carte au lieu d'un tuple, cela fonctionnerait parfaitement. Unicode n'a rien à voir avec ça.

iex(1)> value = %{source: ["Elixir also provides `Port`, `Reference` and `PID` as data types (usually used in process communication), and we will take a quick look at them when talking about processes. For now, let’s take a look at some of the basic operators that go with our basic types."]} 
iex(2)> Poison.encode(value) 
{:ok, 
"{\"source\":[\"Elixir also provides `Port`, `Reference` and `PID` as data types (usually used in process communication), and we will take a quick look at them when talking about processes. For now, let’s take a look at some of the basic operators that go with our basic types.\"]}"} 
+0

Merci pour l'indice ... Je vais refactoriser mon code. En fait, je n'utilise que des maps et des listes, mais j'ai quelques flat_maps dans la récursivité de l'analyse de l'arborescence HTML. Ainsi, certaines de mes cartes '% {cell_type:: code, métadonnées:% {}, source: [" 0o777 "]},' sont converties en listes de mots clés avec des tuples. '[{: type_cellule,: démarque}, {: métadonnées,% {}}, {: source, [" # types de base "]}, {: type_cellule,: démarque}, {: métadonnées,% {}}, { : source, []}, ' –

+0

Il pourrait être utile de changer le nom de la question afin de représenter de plus près le problème. Cela en ferait une référence plus facile pour les autres. – mmartinson