簡體   English   中英

從字符串解析對象時出現意外令牌和JSON

[英]Unexpected token & in JSON when parsing object from string

我試圖使用Poison.encode!()解析從轉換為JSON的長生不老葯地圖中的數據,無論如何我都出錯了:

Unexpected token & in JSON at position 1

如何在此字符串內轉義雙引號,以防止添加“"”?

初始數據:

%{"node_10_10@172.17.0.11" => ["40000000-5fffffff", "a0000000-bfffffff"],
  "node_1_10@172.17.0.2" => ["20000000-3fffffff", "a0000000-bfffffff"],
  "node_2_10@172.17.0.3" => ["20000000-3fffffff", "80000000-9fffffff"],
  "node_3_10@172.17.0.4" => ["20000000-3fffffff", "80000000-9fffffff",
   "e0000000-ffffffff"],
  "node_4_10@172.17.0.5" => ["00000000-1fffffff", "80000000-9fffffff",
   "e0000000-ffffffff"],
  "node_5_10@172.17.0.6" => ["00000000-1fffffff", "60000000-7fffffff",
   "e0000000-ffffffff"],
  "node_6_10@172.17.0.7" => ["00000000-1fffffff", "60000000-7fffffff",
   "c0000000-dfffffff"],
  "node_7_10@172.17.0.8" => ["60000000-7fffffff", "c0000000-dfffffff"],
  "node_8_10@172.17.0.9" => ["40000000-5fffffff", "c0000000-dfffffff"],
  "node_9_10@172.17.0.10" => ["40000000-5fffffff", "a0000000-bfffffff"]}

使用控制器內部的此方法映射到新結構:

defp map_shards(nodes, :nodes), do: %{"nodes": Enum.map(nodes, fn{k, v} -> %{"node": k, "shards": v} end)}    

調用內部索引動作:

nodes = map_shards(resp["by_node"], :nodes)

現在我有這樣的地圖:

%{nodes: [%{node: "node_10_10@172.17.0.11", shards: ["40000000-5fffffff", "a0000000-bfffffff"]}, %{node: "node_1_10@172.17.0.2", shards: ["20000000-3fffffff", "a0000000-bfffffff"]}, %{node: "node_2_10@172.17.0.3", shards: ["20000000-3fffffff", "80000000-9fffffff"]}, %{node: "node_3_10@172.17.0.4", shards: ["20000000-3fffffff", "80000000-9fffffff", "e0000000-ffffffff"]}, %{node: "node_4_10@172.17.0.5", shards: ["00000000-1fffffff", "80000000-9fffffff", "e0000000-ffffffff"]}, %{node: "node_5_10@172.17.0.6", shards: ["00000000-1fffffff", "60000000-7fffffff", "e0000000-ffffffff"]}, %{node: "node_6_10@172.17.0.7", shards: ["00000000-1fffffff", "60000000-7fffffff", "c0000000-dfffffff"]}, %{node: "node_7_10@172.17.0.8", shards: ["60000000-7fffffff", "c0000000-dfffffff"]}, %{node: "node_8_10@172.17.0.9", shards: ["40000000-5fffffff", "c0000000-dfffffff"]}, %{node: "node_9_10@172.17.0.10", shards: ["40000000-5fffffff", "a0000000-bfffffff"]}]}

JS代碼,在模板.eex中具有解析器調用:

var theData = ("<%= Poison.Encoder.encode(@nodes, []) %>");
theData = JSON.parse(theData);

我在JS控制台中看到的內容:

var theData = ("{&quot;nodes&quot;:[{&quot;shards&quot;:[&quot;40000000-5fffffff&quot;,&quot;a0000000-bfffffff&quot;],&quot;node&quot;:&quot;node_10_10@172.17.0.11&quot;},{&quot;shards&quot;:[&quot;20000000-3fffffff&quot;,&quot;a0000000-bfffffff&quot;],&quot;node&quot;:&quot;node_1_10@172.17.0.2&quot;},{&quot;shards&quot;:[&quot;20000000-3fffffff&quot;,&quot;80000000-9fffffff&quot;],&quot;node&quot;:&quot;node_2_10@172.17.0.3&quot;},{&quot;shards&quot;:[&quot;20000000-3fffffff&quot;,&quot;80000000-9fffffff&quot;,&quot;e0000000-ffffffff&quot;],&quot;node&quot;:&quot;node_3_10@172.17.0.4&quot;},{&quot;shards&quot;:[&quot;00000000-1fffffff&quot;,&quot;80000000-9fffffff&quot;,&quot;e0000000-ffffffff&quot;],&quot;node&quot;:&quot;node_4_10@172.17.0.5&quot;},{&quot;shards&quot;:[&quot;00000000-1fffffff&quot;,&quot;60000000-7fffffff&quot;,&quot;e0000000-ffffffff&quot;],&quot;node&quot;:&quot;node_5_10@172.17.0.6&quot;},{&quot;shards&quot;:[&quot;00000000-1fffffff&quot;,&quot;60000000-7fffffff&quot;,&quot;c0000000-dfffffff&quot;],&quot;node&quot;:&quot;node_6_10@172.17.0.7&quot;},{&quot;shards&quot;:[&quot;60000000-7fffffff&quot;,&quot;c0000000-dfffffff&quot;],&quot;node&quot;:&quot;node_7_10@172.17.0.8&quot;},{&quot;shards&quot;:[&quot;40000000-5fffffff&quot;,&quot;c0000000-dfffffff&quot;],&quot;node&quot;:&quot;node_8_10@172.17.0.9&quot;},{&quot;shards&quot;:[&quot;40000000-5fffffff&quot;,&quot;a0000000-bfffffff&quot;],&quot;node&quot;:&quot;node_9_10@172.17.0.10&quot;}]}");

theData = JSON.parse(theData);

當注入這樣的編碼JSON時,您需要禁用自動HTML轉義。 您也不需要周圍的"或方括號。

var theData = <%= raw Poison.Encoder.encode(@nodes, []) %>;

不再需要調用JSON.parsetheData將被設置為值本身,而不是包含JSON的字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM