Conversion de JSON en TSV et TSV en JSON avec Ruby

introduction

Chose que tu veux faire

Convertir les fichiers TSV au format JSON et JSON en fichiers TSV

environnement

Ruby 2.6.5 Mac OS 10.15.5

Exemples utilisés dans cet article

[{"name":"john","gender":"m","age":"18"},
 {"name":"paul","gender":"m","age":"20"},
 {"name":"alice","gender":"f","age":"15"},
 {"name":"dabid","gender":"m","age":"17"},
 {"name":"jasmin","gender":"f","age":"17"}]
Name	gender	age
john	m	18
paul	m	20
alice	f	15
dabid	m	17
jasmin	f	17

Comment convertir JSON en TSV

 require "json" # Décrit pour gérer JSON

 File.open("meibo.json") do |json| #Ouvrez le fichier JSON
   File.open("meibo.txt", "w") do |txt| #Ouvrez le fichier TSV de sortie
 array = JSON.load (json) #Load JSON
 column = ["name", "gender", "age"] # en-tête
 txt.puts (column.join ("\ t")) # Insérer un en-tête
     array.each do |line| #Placez chaque élément du tableau JSON sur chaque ligne du fichier TSV
      attr = [line["name"],line["gender"],line["age"]]
      txt.puts(attr.join("\t"))
    end
  end
end

Tout d'abord, ouvrez le fichier JSON. Ouvrez également le fichier TSV de destination de sortie en mode écriture. Ensuite, lisez le fichier JSON. Comme indiqué ci-dessous, JSON lit un fichier JSON avec JSON.load ([File object]) et le renvoie sous forme de tableau avec des hachages comme éléments.

require "json"

 File.open("meibo.json") do |json|
  array = JSON.load(json)
  p array
end

=>
[{"name"=>"john", "gender"=>"m", "age"=>"18"}, {"name"=>"paul", "gender"=>"m", "age"=>"20"}, {"name"=>"alice", "gender"=>"f", "age"=>"15"}, {"name"=>"dabid", "gender"=>"m", "age"=>"17"}, {"name"=>"jasmin", "gender"=>"f", "age"=>"17"}]

C'est une image de rotation du tableau retourné avec la méthode ʻeach et de création de chaque hachage ligne par ligne dans TSV. La technique à mettre dans chaque ligne de TSV est de retirer la valeur de chaque hachage retiré par ʻeach en spécifiant directement la clé, et de les remettre une fois dans le tableau. Ensuite, utilisez la méthode join pour joindre les tableaux avec des délimiteurs de tabulation et insérez la chaîne dans chaque ligne du fichier TSV.

Le résultat de sortie est le suivant.

name	gender	age
john	m	18
paul	m	20
alice	f	15
dabid	m	17
jasmin	f	17

Où j'étais accro

Au début, comme indiqué ci-dessous, lorsque le tableau après JSON.load était envoyé au traitement ʻeach`, il était stocké dans TSV dans l'ordre des valeurs de chaque objet. ** L'ordre des membres JSON (ensembles de clés et de valeurs) n'a pas d'importance **.

C'est-à-dire: {" name ":" john "," gender ":" m "," age ":" 18 "} et `{" name ":" john "," age ":" 18 "," gender " : "m"} ʻest indiscernable.

Par conséquent, cette fois, il arrive qu'il n'y ait pas de problème si vous convertissez en TSV selon l'ordre des membres de JSON, mais si l'ordre des membres est différent, ce sera étrange lorsque vous convertissez en TSV. C'était.

Donc, c'est un problème, mais une fois que vous retirez la valeur en spécifiant la clé de hachage, mettez-la dans le tableau dans l'ordre des colonnes, puis mettez-la dans le TSV, c'est sûr.

require "json" 

 File.open("meibo.json") do |json|
   File.open("meibo.txt", "w") do |txt|
    array = JSON.load(json)
    column = ["name","gender","age"]
    txt.puts(column.join("\t"))
     array.each do |line|
 txt.puts (line.values.join ("\ t")) # Entrez dans TSV en fonction de la séquence de valeurs de chaque objet dans JSON
    end
  end
end

Comment convertir TSV en JSON

require "json"
require "csv"

hash_ary = []

 File.open("meibo.json","w") do |json|
   CSV.foreach("meibo.txt",col_sep: "\t", headers: true) do |line|
    h = {name: line[0], gender: line[1], age: line[2]}
    hash_ary << h
  end
 Utilisez JSON.dump (hash_ary, json) #to_json
end

Tout d'abord, préparez un fichier pour l'écriture de JSON en mode écriture.

Le fichier TSV est une classe CSV qui utilise la méthode foreach pour convertir chaque ligne en un hachage. Mettez le hachage converti dans un tableau (hash_ary dans ce cas) une fois, et après que toutes les lignes ont été insérées, convertissez le hachage en JSON avec JSON.dump et écrivez-le dans le fichier.

Le résultat de sortie est le suivant.

[{"name":"john","gender":"m","age":"18"},{"name":"paul","gender":"m","age":"20"},{"name":"alice","gender":"f","age":"15"},{"name":"dabid","gender":"m","age":"17"},{"name":"jasmin","gender":"f","age":"17"}]

Où j'étais accro

require "json"
require "csv"

hash_ary = []

 File.open("meibo.json","w") do |json|
   CSV.foreach("meibo.txt",col_sep: "\t", headers: true) do |line|
    h = {name: line[0], gender: line[1], age: line[2]}
    hash_ary << h.to_json
  end
  json << hash_ary
end

Au début, c'était écrit comme ci-dessus, mais si vous le faites comme ça. ..

["{\"name\":\"john\",\"gender\":\"m\",\"age\":\"18\"}", "{\"name\":\"paul\",\"gender\":\"m\",\"age\":\"20\"}", "{\"name\":\"alice\",\"gender\":\"f\",\"age\":\"15\"}", "{\"name\":\"dabid\",\"gender\":\"m\",\"age\":\"17\"}", "{\"name\":\"jasmin\",\"gender\":\"f\",\"age\":\"17\"}"]

Comme vous pouvez le voir, «\» a été inséré avant «» et il n'a pas pu être converti avec succès.

La méthode to_json renvoie une ** chaîne ** au format JSON, donc utiliser JSON.dump au lieu de cela a résolu le problème.

Recommended Posts

Conversion de JSON en TSV et TSV en JSON avec Ruby
Convertir un objet ruby au format JSON
Essayez d'intégrer Ruby et Java avec Dapr
Convertir l'énumération Java et JSON vers et depuis Jackson
Convertir en chaîne Ruby Leet
Conversion du fichier TSV en fichier CSV (avec BOM) en Ruby
Comment gérer les fichiers TSV et les fichiers CSV dans Ruby
[Java] Convertir JSON en Java et Java en JSON-Comment utiliser GSON et Jackson-
Comparé le temps de traitement pour convertir Apache Arrow et JSON en Yosegi
Comment gérer différentes versions de rbenv et Ruby
Convertissez Markdown en HTML avec flexmark-java
Comment convertir LocalDate et Timestamp
Convertissez le code de saut de ligne en une balise de saut de ligne html avec Thymeleaf et sortie
[Android] Convertissez Map en JSON à l'aide de GSON avec Kotlin et Java
Avec ruby ● × Game et Othello (examen de base)
Convertir le langage C en JavaScript avec Emscripten
[Facile] Comment mettre à niveau Ruby et le bundler
Introduction à Ruby 2
[Ruby] Comment convertir un fichier CSV en Yaml (Yml)
[Ruby] Mots clés avec mots clés et valeurs par défaut des arguments
J'ai essayé d'implémenter Ruby avec Ruby (et C) (j'ai joué avec intégré)
[Ruby] Comment utiliser la méthode gsub et la sous-méthode
Convertissez une chaîne en un tableau caractère par caractère avec Swift
JSON avec Java et Jackson Part 2 XSS mesures
Créez un notebook Jupyter avec Docker et exécutez ruby
Différé avec JSON
Convertir Json en List <T> tel quel
Essayez d'obtenir la clé API de redmine avec ruby
AtCoder ABC127 D hash à résoudre avec Ruby 2.7.1
Comment créer une API avec GraphQL et Rails
Rubis et gemme
J'ai essayé de convertir Java Bean et XML avec le formateur XML de Jackson à cette époque
[Java] Convertir et importer des valeurs de fichier avec OpenCSV
Convertir JSON et YAML en Java (en utilisant Jackson et SnakeYAML)
<java> Lire le fichier Zip et le convertir directement en chaîne
Convertissez de gros fichiers XLSX en CSV avec Apache POI
J'ai essayé de lire et de sortir CSV avec Outsystems
Tableau 2D AtCoder ABC129 D résolu en Ruby et Java
[Ruby] Exclure et remplacer des modèles spécifiques par des expressions régulières
Résolution avec Ruby, Perl et Java AtCoder ABC 128 C
Comment créer une fonction de messagerie LINE avec Ruby
[Java] Convertit les chaînes de caractères en majuscules / minuscules (AOJ⑨ --swap majuscules / minuscules)
Convertit le tableau d'erreurs.full_messages en caractères et sortie
J'ai démarré MySQL 5.7 avec docker-compose et j'ai essayé de me connecter
[Ruby] J'ai fait un robot avec de l'anémone et du nokogiri.
[Java] Se référer et définir des variables privées avec réflexion
Comment sérialiser et désérialiser le type LocalDateTime avec GSON
Ressentez facilement le type de base et le type de référence avec ruby 2
Je veux faire des transitions d'écran avec kotlin et java!
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Installez rbenv avec apt sur ubuntu et mettez ruby
Comment installer Gradle et Kotlin avec SDKMAN (Mac)