루비 해시 객체를 JSON으로 변환하는 방법?


340

루비 해시 객체를 JSON으로 변환하는 방법? 그래서 아래 에서이 예제를 시도하고 있는데 작동하지 않습니까?

RubyDoc을보고 있었고 분명히 Hash객체에는 to_json메소드 가 없습니다 . 그러나 저는 Rails가 지원 active_record.to_json하고 지원하는 블로그를 읽고 있습니다 hash#to_json. ActiveRecordRails 객체 는 이해할 수 있지만 HashRails 고유의 것은 아니며 순수한 Ruby 객체입니다. 그래서 Rails hash.to_json에서는 순수 루비에서는 할 수 없습니다.

car = {:make => "bmw", :year => "2003"}
car.to_json

답변:


563

Ruby의 많은 장점 중 하나는 기존 클래스를 자신의 메소드로 확장 할 수 있다는 것입니다. 이를 "클래스 다시 열기"또는 원숭이 패치 (후자의 의미 는 다를 수 있음 )라고합니다.

따라서 여기를 살펴보십시오.

car = {:make => "bmw", :year => "2003"}
# => {:make=>"bmw", :year=>"2003"}
car.to_json
# NoMethodError: undefined method `to_json' for {:make=>"bmw", :year=>"2003"}:Hash
#   from (irb):11
#   from /usr/bin/irb:12:in `<main>'
require 'json'
# => true
car.to_json
# => "{"make":"bmw","year":"2003"}"

보시다시피 요구 json는 마술처럼 to_json우리 에게 방법 을 가져 왔습니다 Hash.


2
내가 말할 수있는 모두 와우입니다 :) 또한 감사합니다! 그래서 기본적으로 json 클래스를 동적으로 확장 할 수 있었습니까 ??
kapso

1
Ruby 객체로 같은 것을 시도했지만 작동하지 않습니다 ?? >> 'json'필요 => true >> class Person >> attr_accessor : fname, : lname >> end => nil >> p = Person.new => # <Person : 0x101155f70> >> p.fname = "청구서 "=>"Bill ">> p.lname ="Shine "=>"Shine ">> p.to_json =>"\ "# <Person : 0x101155f70> \" "
kapso

10
아니오, 아니오, 누군가는 임의의 클래스의 객체를 JSON으로 직렬화하는 방법을 코딩해야합니다. 그들은 그것을했다 HashArray수업 json보석,하지만 클래스는 Person단지 일반입니다 Object. 그러나 Hash대신 상속 할 수 있습니다 . 관리하지 않으면 새 질문을 열 수 있습니다.
Mladen Jablanović

감사. 여기 새로운 질문이 있습니다. 도움을 주시면 감사하겠습니다. 감사. stackoverflow.com/questions/3226054/…
kapso

IRB 유형 출력으로 보이는 것을 보여줍니다. DateTime 객체에서 작동하도록 hash # to_json을 얻으려고했습니다. 이 게시물 덕분에 나는 그것을 얻었다. 그러나 p date_json으로 검사했습니다. 이것은 실제 문자열 "{\"year \ ": 2013, \"mon \ ": 7, \"mday \ ": 16, \"hour \ ": 13, \ "min \": 54, \ "sec \": 32, \ "zone \": \ "-05:00 \", \ "offset \":-18000} " 키 심볼을 문자열로 사용하고 데이터는 변경되지 않습니다. 다시 감사합니다. 늦어서 미안해
Douglas G. Allen

19
require 'json/ext' # to use the C based extension instead of json/pure

puts {hash: 123}.to_json

6

당신은 또한 사용할 수 있습니다 JSON.generate:

require 'json'

JSON.generate({ foo: "bar" })
=> "{\"foo\":\"bar\"}"

또는 별명 JSON.unparse:

require 'json'

JSON.unparse({ foo: "bar" })
=> "{\"foo\":\"bar\"}"

3

파일 맨 위에 다음 줄을 추가하십시오.

require 'json'

그런 다음 다음을 사용할 수 있습니다.

car = {:make => "bmw", :year => "2003"}
car.to_json

또는 다음을 사용할 수 있습니다.

JSON.generate({:make => "bmw", :year => "2003"})

-1

당신은 포함해야합니다 json파일에 합니다

예를 들어

require 'json'

your_hash = {one: "1", two: "2"}
your_hash.to_json

자세한 내용 json은 아래 링크를 방문하십시오. JSON 학습

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.