Estou escrevendo alguns arquivos de dados no formato JSON e gostaria de ter alguns valores de string muito longos divididos em várias linhas. Usando o módulo JSON do python, recebo muitos erros, seja eu uso \
ou \n
como uma fuga.
É possível ter strings de várias linhas no JSON? É principalmente para conforto visual, então suponho que posso ativar a quebra de linha no meu editor, mas estou meio curiosa ...
Respostas:
JSON não permite quebras de linha reais. Você precisa substituir todas as quebras de linha por
\n
.por exemplo:
"first line second line"
pode ser salvo com:
"first line\nsecond line"
Nota:
pois
Python
, isso deve ser escrito como:"first line\\nsecond line"
onde
\\
é para escapar da barra invertida; caso contrário, o python tratará\n
como o caractere de controle "nova linha"fonte
\n
e output via Curses),\n
parece funcionar bem. Depende do mecanismo de exibição / renderização, ao que parece.Eu tive que fazer isso para um projeto pequeno Node.js e encontrei esta solução alternativa :
Isso me parece muito interessante, além disso eu tenho que usar aspas duplas em todos os lugares. Embora contrário, eu poderia, talvez, usar o YAML, mas isso tem outras armadilhas e não é suportado nativamente. Uma vez analisado, apenas uso
myData.modify_head.join('\n')
oumyData.modify_head.join()
, dependendo se desejo uma quebra de linha após cada sequência ou não.fonte
Infelizmente, muitas das respostas aqui abordam a questão de como colocar um caractere de nova linha nos dados da string. A questão é como tornar o código mais bonito, dividindo o valor da string em várias linhas de código. (E mesmo as respostas que reconhecem isso fornecem "soluções" que pressupõem a liberdade de alterar a representação dos dados, o que em muitos casos não é.)
E a pior notícia é que não há uma boa resposta.
Em muitas linguagens de programação, mesmo que elas não suportem explicitamente a divisão de cadeias por linhas, você ainda pode usar a concatenação de cadeias para obter o efeito desejado; e enquanto o compilador não for horrível, tudo bem.
Mas json não é uma linguagem de programação; é apenas uma representação de dados. Você não pode dizer para concatenar seqüências de caracteres. Sua gramática (bastante pequena) também não inclui nenhum recurso para representar uma sequência em várias linhas.
Com a falta de criar um pré-processador de algum tipo (e eu, por exemplo, não tenho vontade de criar meu próprio idioma para resolver esse problema), não há uma solução geral para esse problema. Se você puder alterar o formato dos dados, poderá substituir uma matriz de seqüências de caracteres. Caso contrário, essa é uma das inúmeras maneiras pelas quais o json não é projetado para facilitar a leitura por humanos.
fonte
Confira a especificação ! A produção de caracteres da gramática JSON pode assumir os seguintes valores:
"
ou\
-ou-ou-controle-caractere\"
\\
\/
\b
\f
\n
\r
\t
\u
quatro dígitos hexadecimaisAs novas linhas são "caracteres de controle"; portanto, não, você pode não ter uma nova linha literal dentro da sua string. No entanto, você pode codificá-lo usando qualquer combinação
\n
e\r
necessidade.fonte
JSON não permite quebrar linhas para facilitar a leitura.
Sua melhor aposta é usar um IDE que contorne a linha para você.
fonte
Essa é uma pergunta muito antiga, mas me deparei com isso em uma pesquisa e acho que conheço a origem do seu problema.
JSON não permite novas linhas "reais" em seus dados; só pode ter escapado de novas linhas. Veja a resposta de @YOU . De acordo com a pergunta, parece que você tentou escapar de quebras de linha no Python de duas maneiras: usando o caractere de continuação de linha (
"\"
) ou usando"\n"
como escape.Mas lembre-se: se você estiver usando uma string em python, caracteres especiais com escape (
"\t"
,"\n"
) serão convertidos em caracteres de controle REAL! O"\n"
será substituído pelo caractere de controle ASCII que representa um caractere de nova 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 é impedir que o Python escape de caracteres. Você pode fazer isso usando uma string bruta (colocada
r
na frente da string, como emr"abc\ndef"
, ou incluindo uma barra extra na frente da nova linha ("abc\\ndef"
).Ambas as opções acima, em vez de substituir
"\n"
pelo caractere de controle ASCII da nova linha real, deixarão"\n"
como dois caracteres literais, que, em seguida, o JSON pode interpretar como um escape da nova linha.fonte
Escreva o valor da propriedade como uma matriz de seqüências de caracteres. Como exemplo dado aqui https://gun.io/blog/multi-line-strings-in-json/ . Isso vai ajudar.
Sempre podemos usar uma matriz de seqüências de caracteres para sequências de várias linhas, como a seguir.
E podemos iterar facilmente o array para exibir o conteúdo de várias linhas.
fonte
Use json5 (loader), consulte https://json5.org/ - exemplo (por json5)
fonte
É possível ter strings de várias linhas no JSON?
Sim. Acabei de testar isso agora com o meu navegador Firefox pressionando F12, clicando no console e digitando na parte inferior da tela.
O objeto x acaba de ser criado a partir de uma sequência de formato JSON contendo uma sequência de várias linhas.
O x.text é exibido mostrando que é uma sequência de várias linhas.
Esses dois testes mostram que o intérprete Javascript do Firefox tem prazer em criar e usar JSON com seqüências de várias linhas.
Mais testes com
JSON.stringify
eJSON.parse
mostrou que o interpretador Javascript pode converter um objeto contendo seqüências de linhas múltiplas em JSON e analisá-lo novamente sem nenhum problema.No passado, eu armazenei as obras completas de Shakespeare como uma propriedade em um objeto JSON e as enviei pela Internet, sem corrupção.
Exemplo
Aqui está uma sequência de duas linhas inserida em três linhas
Nós podemos exibir o objeto
dando
ou a corda
dando
O final das linhas na string resulta do uso de \ n e as várias linhas de entrada são obtidas usando apenas \ no final da linha.
Na prática, você pode querer sincronizar as terminações da sua linha com as da string, por exemplo
Comprimento da corda de várias linhas
Observe que a sequência com a nova linha não é maior que a sequência com o espaço. Mesmo que dois caracteres tenham sido digitados no teclado ('\' e 'n'), apenas um caractere é armazenado na string.
fonte
x={"a":NaN}
ex={"a":"a \<literal newline with SHIFT>b"}
, que não são JSON, mas são JavaScriptUse regex para substituir todas as ocorrências de
\r\n
por\\n
.Isso funcionou para mim na Scala.
fonte
Se você estiver disposto a usar o Node.js, poderá fazer o seguinte:
você pode importar com o Node.js e convertê-lo para JSON facilmente da seguinte forma:
e você obtém:
como funciona : você usa o Node.js para carregar um módulo JS, que cria um objeto JS que pode ser facilmente JSON stringificado por Node.js. A opção -e avalia a sequência e a
-p
opção ecoa o resultado do retorno da última operação do Node.js. para stdout.Se você deseja carregar um script .js que esteja em um diretório de trabalho diferente, é necessário alternar as seqüências "" e '':
fonte
Tente usar o
base64
valor da string codificada. Trabalhou para mim na maioria das vezes.depois da
base64
string codificada parecerA codificação e decodificação base64 está disponível em todos os idiomas.
fonte
coloque o texto multilinha no arquivo txt e depois
(funciona no mongoDB)
fonte
cat
.