Parsen einer JSON-Zeichenkette in Ruby

Parsen einer JSON-Zeichenkette in Ruby

JSON (JavaScript Object Notation) ist ein beliebtes Format für den Datenaustausch, das hauptsächlich zwischen Webanwendungen zum Senden und Empfangen von Daten verwendet wird. In diesem Tutorial sehen wir uns an, wie JSON-Strings analysiert werden.

Gängige Beispiele für JSON-Werte könnten sein:

  • eine in eckige Klammern eingeschlossene Werteliste. Bsp. ["Orange", "Apple", [1, 2]]
  • eine Liste von Schlüsseln/Paaren, eingeschlossen in geschweiften Klammern. B. { "name": "John", "sex": "male", "grades": [60, 70, 80, 90] }

Diese JSON-Werte kommen manchmal in String-Form, zum Beispiel als Antwort von einer externen API, und es besteht immer die Notwendigkeit, sie in das umzuwandeln, was Ruby verarbeiten kann. Es gibt eine parse-Methode des JSON-Moduls, die uns das ermöglicht.

Beispielcodes:

require 'json'

json_string = '["Orange", "Apple", [1, 2]]'
another_json_string = '{ "name": "John", "sex": "male", "grades": [60, 70, 80, 90] }'

puts JSON.parse(json_string)
puts JSON.parse(another_json_string)

Ausgabe:

["Orange", "Apple", [1, 2]]
{"name"=>"John", "sex"=>"male", "grades"=>[60, 70, 80, 90]}

Um das JSON-Modul in unserem Code verfügbar zu machen, müssen wir zuerst die Datei anfordern, und das tut die erste Zeile unseres Codes.

Wie im obigen Beispiel gezeigt, konvertiert JSON.parse den json_string in ein Ruby-Array und den another_json_string in einen Ruby-Hash.

Wenn Sie einen JSON-Wert haben, der nicht in einer Zeichenkettenform vorliegt, können Sie to_json aufrufen, um ihn zuerst in eine JSON-Zeichenfolge zu konvertieren, und dann JSON.parse verwenden, um ihn je nach Fall in ein Array oder einen Hash zu konvertieren.

Beispielcodes:

require 'json'

json_one = ["Orange", "Apple", [1, 2]]
json_two = { "name": "John", "sex": "male", "grades": [60, 70, 80, 90] }

puts JSON.parse(json_one.to_json)
puts JSON.parse(json_two.to_json)

Ausgabe:

["Orange", "Apple", [1, 2]]
{"name"=>"John", "sex"=>"male", "grades"=>[60, 70, 80, 90]}