Estoy tratando de configurar una cookie que contenga algunos datos JSON, pero también necesito conservar los saltos de línea. Tengo una forma de guardarlos y renderizarlos que funciona bien en la consola, pero cuando coloco el código en una etiqueta, no funciona.
Aquí está el código:
actualData = JSON.stringify(data.replaceAll("\n", "|")).replaceAll("\\", ""); document.cookie = `data=${actualData}; path=/;`;Aquí está la entrada y salida esperada, que está en la consola:
//input = '[\n {"content": [\n {"title": "e"}\n ]}\n]' //output = 'data="[| {"content": [| {"title": "e"}| ]}|]"; path=/;' Aquí está la entrada y la salida cuando se ejecuta desde una etiqueta <script> :
//input = '[\n {"content": [\n {"title": "e"}\n ]}\n]' //output = 'data="[\\n {\\"co|te|t\\": [\\n {\\"title\\": \\"e\\"}\\n ]}\\n]"'No entiendo cómo el mismo código devuelve un resultado completamente diferente. No sé cómo empeora aún más cuando el matraz lo maneja:
[n {"content": [n {"title": "e"}n ]}n]¿Tiene algo que ver con cómo se manejan las cookies? ¿Tiene algo que ver con la forma en que lo estoy emitiendo?
puede cambiar su táctica y formatear el JSON a una cadena (con la sangría requerida), luego base64 encode , almacenar el valor producido en la cookie. Luego, cuando reciba la cookie en una solicitud posterior, puede base64 decode .
Ejemplo completo a continuación:
import json import base64 my_dict = { "id": "12345", "name": "myname", "text": "", "list_field": [ 123, 456, "some string" ] } my_string = json.dumps(my_dict, indent=4) print(my_string) my_string_bytes = my_string.encode('ascii') b64_encoded = base64.b64encode(my_string_bytes) print(b64_encoded) b64_decoded = base64.b64decode(b64_encoded) my_string_decoded = b64_decoded.decode('ascii') print(my_string_decoded) if my_string == my_string_decoded: print("initial and decoded strings match!")enfoque mucho más limpio, y no propenso a reemplazos de personajes no intencionales