|
|
稳重的铁链 · WPF Prism框架(1) -- ...· 2 年前 · |
|
|
好帅的领带 · 投身LLM(大型语言模型),要从本质上想明白 ...· 2 年前 · |
|
|
任性的棒棒糖 · python操作es修改index名字_mo ...· 2 年前 · |
|
|
淡定的跑步机 · Windows 批处理脚本指南: 日志 - 简书· 3 年前 · |
|
|
酷酷的烈马 · 用python玩转csv文件:csv模块 ...· 3 年前 · |
在JSON中可以有多行字符串吗?
这主要是为了视觉上的舒适,所以我想我可以在我的编辑器中打开自动换行,但我只是有点好奇。
我正在编写一些JSON格式的数据文件,并希望将一些非常长的字符串值拆分为多行。使用python的JSON模块时,不管是使用
\
还是
\n
进行转义,我都会遇到很多错误。
JSON
不允许真正的换行符。您需要用
\n
替换所有的换行符。
例如:
"first line second line"
可以使用以下方式保存:
"first line\nsecond line"
注意:
对于
Python
,这应该写成:
"first line\\nsecond line"
其中python用于转义反斜杠,否则
\\
将把
\n
视为控制字符“换行”。
这是一个非常古老的问题,但我在搜索时发现了这个问题,我想我知道问题的根源。
JSON不允许在其数据中使用“真正的”换行符;它只能有转义的换行符。请参阅来自
@YOU
的
answer
。根据这个问题,看起来您试图通过两种方式在Python中转义换行符:使用行续行符(
"\"
)或使用
"\n"
进行转义。
但请记住:如果您在python中使用字符串,则特殊的转义字符(
"\t"
、
"\n"
)将被转换为真正的控制字符!
"\n"
将替换为表示换行符的ASCII控制字符,而换行符正是JSON中非法的字符。(至于行连续字符,它只是去掉换行符。)
因此,您需要做的是防止Python转义字符。您可以通过使用原始字符串(将
r
放在字符串前面,如
r"abc\ndef"
,或在换行符(
"abc\\ndef"
)前包含一个额外的斜杠)来完成此操作。
上述两种方法都不会将
"\n"
替换为真正的换行符ASCII控制字符,而是将
"\n"
保留为两个文字字符,然后JSON可以将其解释为换行符转义。
JSON不允许为了可读性而换行。
您最好的选择是使用可以为您自动换行的IDE。
将属性值写入字符串数组。就像这里给出的例子 https://gun.io/blog/multi-line-strings-in-json/ 。这将会有所帮助。
我们总是可以使用字符串数组来处理多行字符串,如下所示。
{
"singleLine": "Some singleline String",
"multiline": ["Line one", "line Two", "Line Three"]
}
我们可以很容易地迭代数组来以多行的方式显示内容。
不幸的是,这里的许多答案都解决了如何在字符串数据中放入换行符的问题。问题是如何通过将字符串值拆分到多行代码来使代码看起来更美观。(即使是认识到这一点的答案也提供了“解决方案”,这些“解决方案”假设一个人可以自由地更改数据表示形式,但在许多情况下,人们不能这样做。)
更糟糕的是,没有好的答案。
在许多编程语言中,即使它们不显式地支持跨行拆分字符串,您仍然可以使用字符串连接来获得所需的效果;只要编译器不是很糟糕,这就很好。
但是json不是一种编程语言;它只是一种数据表示。你不能告诉它连接字符串。它的(相当小的)语法也不包括任何在多行上表示字符串的工具。
由于缺少设计某种类型的预处理器(就我而言,我不想有效地编写自己的语言来解决这个问题),所以没有一个通用的解决方案来解决这个问题。如果可以更改数据格式,则可以替换字符串数组。否则,这是json不是为人类可读性而设计的众多方式之一。
尝试一下,它还可以处理JSON.parse()方法无法解析的单引号,并且还支持UTF8字符代码。
parseJSON = function() {
var data = {};
var reader = new FileReader();
reader.onload = function() {
try {
data = JSON.parse(reader.result.replace(/'/g, "\""));
} catch (ex) {
console.log('error' + ex);
reader.readAsText(fileSelector_test[0].files[0], 'utf-8');
}
使用字符串数组:
{
"text": [
"line 1 line 1 line 1 line 1 line 1 line 1 line 1 line 1 ",
"line 2 line 2 line 2 line 2 line 2 line 2 line 2 line 2"
}
然后在代码中加入它们:
<your JSON object>.text.join("\n")
可以在客户端进行编码,在服务器端进行解码。这也会处理\n和\t字符
例如,我需要通过json发送多行xml
{
"xml": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CiAgPFN0cnVjdHVyZXM+CiAgICAgICA8aW5wdXRzPgogICAgICAgICAgICAgICAjIFRoaXMgcHJvZ3JhbSBhZGRzIHR3byBudW1iZXJzCgogICAgICAgICAgICAgICBudW0xID0gMS41CiAgICAgICAgICAgICAgIG51bTIgPSA2LjMKCiAgICAgICAgICAgICAgICMgQWRkIHR3byBudW1iZXJzCiAgICAgICAgICAgICAgIHN1bSA9IG51bTEgKyBudW0yCgogICAgICAgICAgICAgICAjIERpc3BsYXkgdGhlIHN1bQogICAgICAgICAgICAgICBwcmludCgnVGhlIHN1bSBvZiB7MH0gYW5kIHsxfSBpcyB7Mn0nLmZvcm1hdChudW0xLCBudW0yLCBzdW0pKQogICAgICAgPC9pbnB1dHM+CiAgPC9TdHJ1Y3R1cmVzPg=="
}
然后在服务器端解码
public class XMLInput
public string xml { get; set; }
public string DecodeBase64()
var valueBytes = System.Convert.FromBase64String(this.xml);
return Encoding.UTF8.GetString(valueBytes);
public async Task<string> PublishXMLAsync([FromBody] XMLInput xmlInput)
string data = xmlInput.DecodeBase64();
}
一旦解码,您将得到原始的xml
<?xml version="1.0" encoding="utf-8" ?>
<Structures>
<inputs>
# This program adds two numbers
num1 = 1.5
num2 = 6.3
# Add two numbers
|
|
淡定的跑步机 · Windows 批处理脚本指南: 日志 - 简书 3 年前 |