Xavier Nayrac

Rubyiste accro au TDD, serial blogger, apprenti data scientist, heureux utilisateur de Vim, accordéoniste.
Si vous vous sentez particulièrement généreux, suivez moi sur Twitter.

Le format JSON et les caractères de fin de lignes

| Comments

Niveau : facile

Dans un fichier au format JSON, on ne met pas tout ce qu’on veut… Notamment en ce qui concerne les caractères de fin de ligne et les tabulations.

En effet, ceux-ci ne sont pas autorisés à l’intérieur des chaines de caractères. Voici un exemple.

Tout d’abord, pas de caractères spéciaux:

doc.json
1
2
3
{
  "item" : "article"
}
1
2
3
4
5
6
7
$ rvm use 2.1.0
Using /home/xavier/.rvm/gems/ruby-2.1.0
$ irb
>> require 'json'
=> file = IO.read File.expand_path('./doc.json')
>> JSON.parse file
=> {"item"=>"Article"}

Tout va bien.

Maintenant avec des caractères de fin de lignes échappés:

doc.json
1
2
3
{
  "item" : "article\ndescription\nprice"
}
1
2
3
4
=> file = IO.read File.expand_path('./doc.json')
=> "{\n  \"item\" : \"article\\ndescription\\nprice\"\n}\n"
>> JSON.parse file
=> {"item"=>"article\ndescription\nprice"}

C’est toujours bon.

Par contre, avec des fins de lignes «en dur» dans le fichier:

doc.json
1
2
3
4
5
{
  "item" : "Article
    description
    price"
}
1
2
3
4
5
6
7
8
9
>> file = IO.read File.expand_path('./doc.json')
=> "{\n  \"item\" : \"Article\n    description\n    price\"\n}\n"
>> JSON.parse file
JSON::ParserError: 757: unexpected token at '{
  "item" : "Article
    description
    price"
}
'

Rien ne va plus. C’est pareil avec les tabulations.

Si vous récupérez ce genre de fichier, vous pouvez les nettoyer en remplaçant par exemple les tabulations et les fins de ligne par un espace:

1
file.gsub(/[\t\n]/, ' ')

À demain.

Articles connexes

Commentaires