758 Stimmen

Wie man JSON-Ausgaben in Ruby on Rails "hübsch" formatiert

Ich möchte, dass meine JSON-Ausgabe in Ruby on Rails "hübsch" oder schön formatiert ist.

Im Moment rufe ich to_json und mein JSON steht in einer einzigen Zeile. Manchmal kann dies schwierig sein, zu sehen, wenn es ein Problem in der JSON-Ausgabe-Stream ist.

Gibt es eine Möglichkeit zu konfigurieren, um meine JSON "hübsch" oder schön formatiert in Rails zu machen?

7voto

TorvaldsDB Punkte 559

wenn Sie das active_record-Objekt behandeln wollen, puts ist ausreichend.

zum Beispiel:

  • sin puts

    2.6.0 (main):0 > User.first.to_json User Load (0.4ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT $1 [["LIMIT", 1]] => "{\"id\":1,\"admin\":true,\"email\":\"admin@gmail.com\",\"password_digest\":\"$2a$10$TQy3P7NT8KrdCzliNUsZzuhmo40LGKoth2hwD3OI.kD0lYiIEwB1y\",\"created_at\":\"2021-07-20T08:34:19.350Z\",\"updated_at\":\"2021-07-20T08:34:19.350Z\",\"name\":\"Arden Stark\"}"

  • mit puts

    2.6.0 (main):0 > puts User.first.to_json User Load (0.3ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT $1 [["LIMIT", 1]] {"id":1,"admin":true,"email":"admin@gmail.com","password_digest":"$2a$10$TQy3P7NT8KrdCzliNUsZzuhmo40LGKoth2hwD3OI.kD0lYiIEwB1y","created_at":"2021-07-20T08:34:19.350Z","updated_at":"2021-07-20T08:34:19.350Z","name":"Arden Stark"} => nil

wenn Sie die json-Daten verarbeiten, JSON.pretty_generate ist eine gute Alternative

obj = {foo: [:bar, :baz], bat: {bam: 0, bad: 1}}
json = JSON.pretty_generate(obj)
puts json

Ausgabe:

{
  "foo": [
    "bar",
    "baz"
  ],
  "bat": {
    "bam": 0,
    "bad": 1
  }
}

wenn es im ROR-Projekt ist, bevorzuge ich immer die Verwendung von gem pry-rails zur Formatierung meiner Codes im rails console statt awesome_print was zu langatmig ist.

Beispiel für pry-rails :

enter image description here

es hat auch eine Syntaxhervorhebung.

6voto

sealocal Punkte 8580

Wenn Sie dies schnell in eine Rails-Controller-Aktion implementieren möchten, um eine JSON-Antwort zu senden:

def index
  my_json = '{ "key": "value" }'
  render json: JSON.pretty_generate( JSON.parse my_json )
end

5voto

Tony Punkte 9820

Ich habe das Gem CodeRay verwendet und es funktioniert ziemlich gut. Das Format enthält Farben und es erkennt eine Menge verschiedener Formate.

Ich habe es auf ein Gem, das für das Debuggen von Schienen-APIs verwendet werden kann und es funktioniert ziemlich gut.

Übrigens heißt der Edelstein 'api_explorer' ( http://www.github.com/toptierlabs/api_explorer )

5voto

Hier ist meine Lösung, die ich aus anderen Beiträgen während meiner eigenen Suche abgeleitet habe.

So können Sie die pp- und jj-Ausgabe bei Bedarf in eine Datei übertragen.

require "pp"
require "json"

class File
  def pp(*objs)
    objs.each {|obj|
      PP.pp(obj, self)
    }
    objs.size <= 1 ? objs.first : objs
  end
  def jj(*objs)
    objs.each {|obj|
      obj = JSON.parse(obj.to_json)
      self.puts JSON.pretty_generate(obj)
    }
    objs.size <= 1 ? objs.first : objs
  end
end

test_object = { :name => { first: "Christopher", last: "Mullins" }, :grades => [ "English" => "B+", "Algebra" => "A+" ] }

test_json_object = JSON.parse(test_object.to_json)

File.open("log/object_dump.txt", "w") do |file|
  file.pp(test_object)
end

File.open("log/json_dump.txt", "w") do |file|
  file.jj(test_json_object)
end

4voto

SergA Punkte 1015

Hübsche Druckvariante ( Schiene ) :

my_obj = {
  'array' => [1, 2, 3, { "sample" => "hash"}, 44455, 677778, nil ],
  foo: "bar", rrr: {"pid": 63, "state with nil and \"nil\"": false},
  wwww: 'w' * 74
}

require 'pp'
puts my_obj.as_json.pretty_inspect.
            gsub('=>', ': ').
            gsub(/"(?:[^"\\]|\\.)*"|\bnil\b/) {|m| m == 'nil' ? 'null' : m }.
            gsub(/\s+$/, "")

Ergebnis:

{"array": [1, 2, 3, {"sample": "hash"}, 44455, 677778, null],
 "foo": "bar",
 "rrr": {"pid": 63, "state with nil and \"nil\"": false},
 "wwww":
  "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X