Konvertieren Sie mit Ruby von JSON nach TSV und von TSV nach JSON

Einführung

Was du machen willst

Konvertieren Sie TSV-Dateien in das JSON-Format und JSON in TSV-Dateien

Umgebung

Ruby 2.6.5 Mac OS 10.15.5

In diesem Artikel verwendete Beispiele

[{"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

So konvertieren Sie von JSON zu TSV

 erfordern "json" # Beschrieben, um JSON zu behandeln

 File.open("meibo.json") do |json| #Öffnen Sie die JSON-Datei
   File.open("meibo.txt", "w") do |txt| #Öffnen Sie die TSV-Ausgabedatei
 array = JSON.load (json) # JSON laden
 column = ["Name", "Geschlecht", "Alter"] # Header
 txt.puts (column.join ("\ t")) # Header einfügen
     array.each do |line| #Fügen Sie jedes Element des JSON-Arrays in jede Zeile der TSV-Datei ein
      attr = [line["name"],line["gender"],line["age"]]
      txt.puts(attr.join("\t"))
    end
  end
end

Öffnen Sie zunächst die JSON-Datei. Öffnen Sie auch die Ausgabeziel-TSV-Datei im Schreibmodus. Lesen Sie als Nächstes die JSON-Datei. Wie unten gezeigt, liest JSON eine JSON-Datei mit "JSON.load ([Dateiobjekt])" und gibt sie als Array mit Hashes als Elementen zurück.

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"}]

Es ist ein Bild, in dem das zurückgegebene Array mit der Methode "each" gedreht und jeder Hash zeilenweise in TSV erstellt wird. Die Technik, die in jede Zeile von TSV eingefügt wird, besteht darin, den Wert jedes von "jedem" herausgenommenen Hashs durch direkte Angabe des Schlüssels herauszunehmen und sie einmal wieder in das Array einzufügen. Verwenden Sie dann die Join-Methode, um die Arrays mit Tabulatortrennzeichen zu verbinden und die Zeichenfolge in jede Zeile der TSV-Datei einzufügen.

Das Ausgabeergebnis ist wie folgt.

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

Wo ich süchtig war

Wie unten gezeigt, wurde das Array nach dem Senden von "JSON.load" an "jede" Verarbeitung zunächst in der Reihenfolge der Werte jedes Objekts in TSV gespeichert. ** Die Reihenfolge der JSON-Mitglieder (Schlüssel- und Wertesätze) spielt keine Rolle **.

Das heißt, "{" Name ":" John "," Geschlecht ":" m "," Alter ":" 18 "}" und "{" Name ":" John "," Alter ":" 18 "," Geschlecht " : "m"} `ist nicht zu unterscheiden.

Daher ist es diesmal kein Problem, wenn Sie gemäß der Reihenfolge der Mitglieder von JSON in TSV konvertieren. Wenn die Reihenfolge der Mitglieder jedoch unterschiedlich ist, ist es seltsam, wenn Sie in TSV konvertieren. Es war.

Es ist also ein Ärger, aber wenn Sie den Wert durch Angabe des Hash-Schlüssels herausnehmen, ihn in der Reihenfolge der Spalten in das Array einfügen und dann in den TSV einfügen, ist dies sicher.

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")) #Geben Sie in TSV entsprechend der Wertesequenz jedes Objekts in JSON ein
    end
  end
end

So konvertieren Sie von TSV nach 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
 Verwenden Sie JSON.dump (hash_ary, json) #to_json
end

Bereiten Sie zunächst eine Datei zum Schreiben von JSON im Schreibmodus vor.

Die TSV-Datei ist eine CSV-Klasse, die die Methode "foreach" verwendet, um jede Zeile in einen Hash zu konvertieren. Fügen Sie den konvertierten Hash einmal in ein Array ein (in diesem Fall "hash_ary"). Nachdem alle Zeilen eingefügt wurden, konvertieren Sie den Hash mit "JSON.dump" in JSON und schreiben Sie ihn in die Datei.

Das Ausgabeergebnis ist wie folgt.

[{"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"}]

Wo ich süchtig war

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

Zuerst wurde es wie oben geschrieben, aber wenn Sie es so machen. ..

["{\"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\"}"]

Wie Sie sehen können, wurde "" vor "" eingefügt und konnte nicht erfolgreich konvertiert werden.

Die Methode "to_json" wird als JSON-formatierte ** Zeichenfolge ** zurückgegeben. Die Verwendung von "JSON.dump" anstelle des Problems löste das Problem.

Recommended Posts

Konvertieren Sie mit Ruby von JSON nach TSV und von TSV nach JSON
Konvertieren Sie das Ruby-Objekt in das JSON-Format
Versuchen Sie, Ruby und Java in Dapr zu integrieren
Konvertieren Sie Java Enum Enumeration und JSON von und nach Jackson
In Ruby Leet-Zeichenfolge konvertieren
Konvertieren von TSV-Dateien in CSV-Dateien (mit Stückliste) in Ruby
Umgang mit TSV-Dateien und CSV-Dateien in Ruby
[Java] Konvertieren Sie JSON in Java und Java in JSON-How to use GSON and Jackson-
Vergleich der Verarbeitungszeit für die Konvertierung von Apache Arrow und JSON in Yosegi
Umgang mit verschiedenen Versionen von rbenv und Ruby
Konvertieren Sie Markdown mit flexmark-java in HTML
So konvertieren Sie LocalDate und Timestamp
Thymeleaf konvertiert den Zeilenvorschubcode in ein HTML-Zeilenvorschub-Tag und gibt ihn aus.
[Android] Konvertieren Sie Map in JSON mit GSON mit Kotlin und Java
Mit Rubin ● × Game und Othello (Grundlegende Bewertung)
Konvertieren Sie die C-Sprache mit Emscripten in JavaScript
[Einfach] So aktualisieren Sie Ruby und Bundler
Einführung in Ruby 2
[Ruby] So konvertieren Sie eine CSV-Datei in Yaml (Yml)
[Ruby] Schlüsselwörter mit Schlüsselwörtern und Standardwerten von Argumenten
Ich habe versucht, Ruby mit Ruby (und C) zu implementieren (ich habe mit Builtin gespielt)
[Ruby] Verwendung der gsub-Methode und der sub-Methode
Konvertieren Sie eine Zeichenfolge mit swift in ein zeichenweises Array
JSON mit Java und Jackson Teil 2 XSS-Maßnahmen
Erstellen Sie mit Docker ein Jupyter-Notizbuch und führen Sie Ruby aus
Anders als bei JSON
Konvertieren Sie Json so wie es ist in List <T>
Versuchen Sie, den API-Schlüssel von Redmine mit Ruby zu erhalten
AtCoder ABC127 D Hash mit Ruby 2.7.1 zu lösen
So erstellen Sie eine API mit GraphQL und Rails
Rubin und Edelstein
In dieser Zeit habe ich versucht, Java Bean und XML mit dem Jackson-Formatierer XML zu konvertieren
[Java] Konvertieren und Importieren von Dateiwerten mit OpenCSV
Konvertieren Sie JSON und YAML in Java (mit Jackson und SnakeYAML)
<java> Zip-Datei lesen und direkt in String konvertieren
Konvertieren Sie große XLSX-Dateien mit Apache POI in CSV
Ich habe versucht, CSV mit Outsystems zu lesen und auszugeben
AtCoder ABC129 D 2D-Array In Ruby und Java gelöst
[Ruby] Schließen Sie bestimmte Muster aus und ersetzen Sie sie durch reguläre Ausdrücke
Lösen mit Ruby, Perl und Java AtCoder ABC 128 C.
So erstellen Sie eine mit Ruby erstellte LINE-Messaging-Funktion
[Java] Konvertieren Sie Zeichenfolgen in Groß- / Kleinschreibung (AOJ⑨ - Swap in Groß- / Kleinschreibung)
Konvertieren Sie das Array von error.full_messages in Zeichen und geben Sie es aus
Ich habe MySQL 5.7 mit Docker-Compose gestartet und versucht, eine Verbindung herzustellen
[Ruby] Ich habe einen Crawler mit Anemone und Nokogiri gemacht.
[Java] Verweisen Sie auf und setzen Sie private Variablen mit Reflektion
So serialisieren und deserialisieren Sie den LocalDateTime-Typ mit GSON
Fühlen Sie den Grundtyp und Referenztyp leicht mit Rubin 2
Ich möchte Bildschirmübergänge mit Kotlin und Java machen!
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
Installieren Sie rbenv mit apt auf Ubuntu und setzen Sie Ruby
So installieren Sie Gradle und Kotlin mit SDKMAN (Mac)