Pregunta

Tengo una lista de tuplas que son cabeceras HTTP. Quiero convertir la lista a un objeto JSON. Trato mochijson2 pero fue en vano.

Así que tengo la siguiente:

[{'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"}]

Y le gustaría esto (una cadena JSON binario):

<<"{\"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\"}">>

Y trato de éste, donde A es la lista original de tuplas:

list_to_binary(mochijson2:encode(A)).

sospecho que necesito para entrar en un formato que mochijson2 puede interpretar mejor. Y luego convertir a binario. O encontrar una manera de tener todos los personajes representados como cadenas (en lugar de tener algunos como lista de números enteros).

muy apreciado si usted me podría apuntar en la dirección correcta con un código de ejemplo.

¿Fue útil?

Solución

es necesario convertir esas cadenas en el interior hay en binario antes de lo envía al codificador. El codificador mochijson2 simplemente considera esto como una lista de números enteros y la emite como una matriz. Así mochijson2 necesita que convert{'key', "val"} en {'key', <<"val">>}

Probar en el código:

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]).

O, si lo prefiere el uso de Diversiones:

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]).
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top