如何在保留缩进的同时将 JSON 数据设置为 cookie?
How do I set JSON data as a cookie while preserving the indentation?
我正在尝试设置一个包含一些 JSON 数据的 cookie,但我还需要保留换行符。我有一种方法来保存它们并呈现它们,这在控制台中运行良好,但是当我实际将代码放入标签中时,它不起作用。
代码如下:
actualData = JSON.stringify(data.replaceAll("\n", "|")).replaceAll("\", "");
document.cookie = `data=${actualData}; path=/;`;
这是控制台中的预期输入和输出:
//input = '[\n {"content": [\n {"title": "e"}\n ]}\n]'
//output = 'data="[| {"content": [| {"title": "e"}| ]}|]"; path=/;'
这是 运行 来自 <script>
标签时的输入和输出:
//input = '[\n {"content": [\n {"title": "e"}\n ]}\n]'
//output = 'data="[\n {\"co|te|t\": [\n {\"title\": \"e\"}\n ]}\n]"'
我不明白同样的代码怎么会返回完全不同的结果。我不知道当 flask 处理它时它如何变得更糟:
[n {"content": [n {"title": "e"}n ]}n]
这与 cookie 的处理方式有关吗?跟我输出的方式有关系吗?
你可以改变你的策略,将 JSON 格式化为字符串(具有所需的缩进),然后 base64 encode
字符串,将生成的值存储到 cookie 中。然后,当您在后续请求中收到 cookie 时,您可以 base64 decode
它。
完整示例如下:
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!")
更简洁的方法,并且不容易出现无意的字符替换
我正在尝试设置一个包含一些 JSON 数据的 cookie,但我还需要保留换行符。我有一种方法来保存它们并呈现它们,这在控制台中运行良好,但是当我实际将代码放入标签中时,它不起作用。
代码如下:
actualData = JSON.stringify(data.replaceAll("\n", "|")).replaceAll("\", "");
document.cookie = `data=${actualData}; path=/;`;
这是控制台中的预期输入和输出:
//input = '[\n {"content": [\n {"title": "e"}\n ]}\n]'
//output = 'data="[| {"content": [| {"title": "e"}| ]}|]"; path=/;'
这是 运行 来自 <script>
标签时的输入和输出:
//input = '[\n {"content": [\n {"title": "e"}\n ]}\n]'
//output = 'data="[\n {\"co|te|t\": [\n {\"title\": \"e\"}\n ]}\n]"'
我不明白同样的代码怎么会返回完全不同的结果。我不知道当 flask 处理它时它如何变得更糟:
[n {"content": [n {"title": "e"}n ]}n]
这与 cookie 的处理方式有关吗?跟我输出的方式有关系吗?
你可以改变你的策略,将 JSON 格式化为字符串(具有所需的缩进),然后 base64 encode
字符串,将生成的值存储到 cookie 中。然后,当您在后续请求中收到 cookie 时,您可以 base64 decode
它。
完整示例如下:
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!")
更简洁的方法,并且不容易出现无意的字符替换