Question

J'ai une liste de tuples qui sont en-têtes HTTP. Je veux convertir la liste à un objet JSON. J'essaie mochijson2 mais en vain.

J'ai donc ce qui suit:

[{'Accept',"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"},
 {'Accept-Charset',"ISO-8859-1,utf-8;q=0.7,*;q=0.7"},
 {'Accept-Encoding',"gzip,deflate"},
 {'Accept-Language',"en-us,en;q=0.5"},
 {'Cache-Control',"max-age=0"},
 {'Connection',"close"},
 {'Cookie',"uid=CsDbk0y1bKEzLAOzAwZUAg=="},
 {'User-Agent',"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10"}]

Et souhaite que ce (une chaîne JSON binaire):

<<"{\"Accept\":\"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\",
 \"Accept-Charset\":\"ISO-8859-1,utf-8;q=0.7,*;q=0.7\",
 \"Accept-Encoding\":\"gzip,deflate\",
 \"Accept-Language\":\"en-us,en;q=0.5\",
 \"Cache-Control\":\"max-age=0\",
 \"Connection\":\"close\",
 \"Cookie\":\"uid=CsDbk0y1bKEzLAOzAwZUAg==\",
 \"User-Agent\":\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10\"}">>

Et j'essaie ce où A est la liste originale des tuples:

list_to_binary(mochijson2:encode(A)).

Je pense que je dois l'obtenir dans un format qui peut mochijson2 mieux interpréter. Et puis convertir en binaire. Ou trouver un moyen d'avoir tous les personnages représentés sous forme de chaînes (plutôt que d'avoir une liste d'entiers).

Très apprécié si vous pouviez me diriger dans la bonne direction avec un code échantillon.

Était-ce utile?

La solution

Vous devez convertir ces chaînes à l'intérieur il en binaire avant d'envoyer au codeur. Le codeur mochijson2 considère que cela comme une liste d'entiers et sorties comme un tableau. Donc besoins mochijson2 vous à convert{'key', "val"} dans {'key', <<"val">>}

Essayez ceci dans votre code:

Original = [
  {'Accept-Charset',"ISO-8859-1,utf-8;q=0.7,*;q=0.7"}, 
  {'Accept-Encoding',"gzip,deflate"}
].
StingConverted = [ {X,list_to_binary(Y)} || {X,Y} <- Original ].
Output = mochijson2:encode(StingConverted).
io:format("This is correct: ~s~n", [Output]).

Ou si vous préférez utiliser Funs:

Original = [
  {'Accept-Charset',"ISO-8859-1,utf-8;q=0.7,*;q=0.7"}, 
  {'Accept-Encoding',"gzip,deflate"}
].
ConvertFun = fun({X,Y}) -> {X,list_to_binary(Y)} end.
StingConverted = lists:map(ConvertFun, Original).
Output = mochijson2:encode(StingConverted).
io:format("This is correct: ~s~n", [Output]).
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top