0

レール v 3.0.11、ルビー v 1.9.3

以下は、 ActiveModel::Serializers::JSONを含み、カスタム プロパティ名を持つ JSON を出力するためにas_jsonをオーバーライドする私のクラスです。Cell、Rows、Column などの他のクラスを使用し、独自の as_json がオーバーライドされ、ActiveModel::Serializers::JSONが含まれています。

class DataObject

include ActiveModel::Serializers::JSON

attr_accessor :rows, :columns, :options

def initialize(rows = [], cols = [], options = {})
  @rows = rows
  @columns = cols
  @options = options
end

def add_row(row)
  @rows << row
end

def add_column(column)
  @columns << column
end

def attributes
  { 'rows' => rows, 'cols' => columns, 'options' => options}
end

def as_json(json_options = {})
  json_hash = {cols: columns, rows: rows}
  json_hash[:p] = options unless options.empty?
  json_hash
end

def create_data
  data = DataObject.new

  data.add_column(Column.new('A', 'New A', 'string'))
  data.add_column(Column.new('B', 'B-label', 'number'))
  data.add_column(Column.new('C', 'Label-C', 'date'))

  row1 = Row.new
  row1.add_cell(Cell.new('first-a'))
  row1.add_cell(Cell.new('first-b', 'First Alphabet B'))
  row1.add_cell(Cell.new('first-c', 'First CCCCC'))
  data.add_row(row1)

  row2 = Row.new
  row2.add_cell(Cell.new('second-a'))
  row2.add_cell(Cell.new('second-b', 'Second Alphabet B'))
  row2.add_cell(Cell.new('second-c', 'Second CCCCC'))
  data.add_row(row2)

  p data.to_json

 end

end

このクラスを Rails コンソールから次のようにテストすると、次のようになります。

1.9.3dev :001 > dobject = DataObject.new
 => #<DataObject:0xb8fa970 @rows=[], @columns=[], @options={}> 
1.9.3dev :002 > dobject.create_data

次の出力を次の形式で取得します。

  => "{\"cols\":[{\"id\":\"A\",\"label\":\"New A\",\"type\":\"string\"},{\"id\":\"B\",\"label\":\"B-label\",\"type\":\"number\"},{\"id\":\"C\",\"label\":\"Label-C\",\"type\":\"date\"}],\"rows\":[{\"c\":[{\"v\":\"first-a\"},{\"v\":\"first-b\",\"f\":\"First Alphabet B\"},{\"v\":\"first-c\",\"f\":\"First CCCCC\"}]},{\"c\":[{\"v\":\"second-a\"},{\"v\":\"second-b\",\"f\":\"Second Alphabet B\"},{\"v\":\"second-c\",\"f\":\"Second CCCCC\"}]}]}"

エスケープされた引用符を含む JSON を示しているため、読みにくくなっています。

出力を読みやすい方法、つまりフォーマットされた JSON で表示できる方法はありますか?

また、as_json をオーバーライドして、:only、:except、:methods などの元のサポートされているオプションを活用し、必要な名前で JSON プロパティを出力するにはどうすればよいですか?

ありがとう 、

ジグネシュ

4

1 に答える 1

3

読み取り可能なjson出力の場合、これは機能するはずです:

puts JSON.pretty_generate(JSON.parse(dobject.create_data))
于 2012-06-03T03:58:43.273 に答える