I'm escrevendo alguns arquivos de dados em formato JSON e gostaria de ter alguns valores de string realmente longos divididos em várias linhas. Usando python's módulo JSON eu recebo um monte de erros, quer eu use \' ou
\n' como uma fuga.
É possível ter cordas multi-linhas no JSON? It's principalmente para conforto visual, por isso suponho que posso simplesmente ligar a palavra no meu editor, mas eu'estou apenas curioso...
JSON não permite quebras de linha reais. Você precisa substituir todas as quebras de linha por \n
.
por exemplo:
"primeira linha segunda linha"
pode salvar com:
primeira linha"primeira linha"segunda linha;``
Nota:
para 'Python', isto deve ser escrito como:
primeira linha"primeira linha"segunda linha"``
onde "é para fugir à barra invertida, caso contrário a pitão tratará "não" como o carácter de controlo "nova linha"
Eu tive que fazer isso para um pequeno projeto do Node.js e encontrei este trabalho:
{
"modify_head": [
"<script type='text/javascript'>",
"<!--",
" function drawSomeText(id) {",
" var pjs = Processing.getInstanceById(id);",
" var text = document.getElementById('inputtext').value;",
" pjs.drawText(text);}",
"-->",
"</script>"
],
"modify_body": [
"<input type='text' id='inputtext'></input>",
"<button onclick=drawSomeText('ExampleCanvas')></button>"
],
}
Isto parece-me muito bem, mas tenho de usar aspas duplas em todo o lado. Embora de outra forma, eu poderia, talvez, usar YAML, mas isso tem outras armadilhas e não é suportado nativamente. Uma vez analisado, eu apenas utilizo myData.modify_head.join('\n')
ou myData.modify_head.join()
, dependendo se eu quero ou não uma quebra de linha após cada string.
Esta é uma pergunta muito antiga, mas encontrei isto numa pesquisa e acho que sei a origem do seu problema.
JSON não permite " real" novas linhas nos seus dados; só pode ter escapado novas linhas. Veja a resposta de @YOU. De acordo com a pergunta, parece que você tentou escapar das quebras de linha em Python de duas maneiras: utilizando o caractere de continuação de linha ("\"
) ou utilizando "\n"
como um escape.
Mas tenha em mente: se você estiver utilizando uma string em python, caracteres especiais de fuga ("\t"
, "\n"
) são traduzidos em caracteres de controle REAL! O "\n"
será substituído pelo caractere de controle ASCII representando um novo caractere de linha, que é precisamente o caractere que é ilegal no JSON. (Quanto ao caractere de continuação de linha, ele simplesmente retira a nova linha).
Então o que você precisa fazer é evitar que Python escape dos personagens. Você pode fazer isso utilizando uma string bruta (coloque r' na frente da string, como em
r"abc\ndef", ou incluindo uma barra extra na frente da nova linha (
"abc\\ndef"`).
Os dois acima, ao invés de substituir "\n"
pelo verdadeiro caractere de controle da nova linha ASCII, deixará "\n"
como dois caracteres literais, que então o JSON pode interpretar como uma nova linha de escape.