j'ai essayé d'analyser les données de carte elixir converti en JSON en utilisant Poison.encode(), en tout cas, je me suis erreur:jeton inattendu et JSON lorsque l'objet de l'analyse syntaxique chaîne
Unexpected token & in JSON at position 1
Comment échapper à double citations à l'intérieur de cette chaîne, pour éviter d'ajouter ""e;"?
données initiales:
%{"[email protected]" => ["40000000-5fffffff", "a0000000-bfffffff"],
"[email protected]" => ["20000000-3fffffff", "a0000000-bfffffff"],
"[email protected]" => ["20000000-3fffffff", "80000000-9fffffff"],
"[email protected]" => ["20000000-3fffffff", "80000000-9fffffff",
"e0000000-ffffffff"],
"[email protected]" => ["00000000-1fffffff", "80000000-9fffffff",
"e0000000-ffffffff"],
"[email protected]" => ["00000000-1fffffff", "60000000-7fffffff",
"e0000000-ffffffff"],
"[email protected]" => ["00000000-1fffffff", "60000000-7fffffff",
"c0000000-dfffffff"],
"[email protected]" => ["60000000-7fffffff", "c0000000-dfffffff"],
"[email protected]" => ["40000000-5fffffff", "c0000000-dfffffff"],
"[email protected]" => ["40000000-5fffffff", "a0000000-bfffffff"]}
mappées à la nouvelle structure, en utilisant cette méthode dans le contrôleur:
defp map_shards(nodes, :nodes), do: %{"nodes": Enum.map(nodes, fn{k, v} -> %{"node": k, "shards": v} end)}
Appel à l'intérieur action index:
nodes = map_shards(resp["by_node"], :nodes)
Maintenant, j'ai carte comme cela :
%{nodes: [%{node: "[email protected]", shards: ["40000000-5fffffff", "a0000000-bfffffff"]}, %{node: "[email protected]", shards: ["20000000-3fffffff", "a0000000-bfffffff"]}, %{node: "[email protected]", shards: ["20000000-3fffffff", "80000000-9fffffff"]}, %{node: "[email protected]", shards: ["20000000-3fffffff", "80000000-9fffffff", "e0000000-ffffffff"]}, %{node: "[email protected]", shards: ["00000000-1fffffff", "80000000-9fffffff", "e0000000-ffffffff"]}, %{node: "[email protected]", shards: ["00000000-1fffffff", "60000000-7fffffff", "e0000000-ffffffff"]}, %{node: "[email protected]", shards: ["00000000-1fffffff", "60000000-7fffffff", "c0000000-dfffffff"]}, %{node: "[email protected]", shards: ["60000000-7fffffff", "c0000000-dfffffff"]}, %{node: "[email protected]", shards: ["40000000-5fffffff", "c0000000-dfffffff"]}, %{node: "[email protected]", shards: ["40000000-5fffffff", "a0000000-bfffffff"]}]}
Code JS, avec appel analyseur à l'intérieur modèle .eex:
var theData = ("<%= Poison.Encoder.encode(@nodes, []) %>");
theData = JSON.parse(theData);
Ce que je vois dans la console JS:
var theData = ("{"nodes":[{"shards":["40000000-5fffffff","a0000000-bfffffff"],"node":"[email protected]"},{"shards":["20000000-3fffffff","a0000000-bfffffff"],"node":"[email protected]"},{"shards":["20000000-3fffffff","80000000-9fffffff"],"node":"[email protected]"},{"shards":["20000000-3fffffff","80000000-9fffffff","e0000000-ffffffff"],"node":"[email protected]"},{"shards":["00000000-1fffffff","80000000-9fffffff","e0000000-ffffffff"],"node":"[email protected]"},{"shards":["00000000-1fffffff","60000000-7fffffff","e0000000-ffffffff"],"node":"[email protected]"},{"shards":["00000000-1fffffff","60000000-7fffffff","c0000000-dfffffff"],"node":"[email protected]"},{"shards":["60000000-7fffffff","c0000000-dfffffff"],"node":"[email protected]"},{"shards":["40000000-5fffffff","c0000000-dfffffff"],"node":"[email protected]"},{"shards":["40000000-5fffffff","a0000000-bfffffff"],"node":"[email protected]"}]}");
theData = JSON.parse (theData);
Merci! Oui, maintenant je vois. J'ai essayé sans JSON.parse. –