ActiveRecord::Relation을 map으로 짜내 두꺼운 JSON으로 변환
5219 단어 JSONRailsRails4ActiveRecord루비
그럴 때는 예,
출처 : 재미있는 TV 정보국
JSON으로 변환합시다.
그러나 모든 열의 정보는 필요하지 않습니다. 게다가 가능하면 어소시에이션으로 취해 온 다른 레코드의 정보도 JSON에 붐비는 것 같다.
이번에는 그런 당신을 위해 map을 사용한 간편한 JSON 변환 방법을 소개합니다.
DB 구성
이번 목표는 트위터와 같은 앱을 이미지하고,
{
"ジェイソン": ["why", "japanese", "people"],
"たろう": ["おはよう", "ありがとう"]
}
이런 느낌의 JSON 데이터를 얻는 것을 목표로합니다.
users 테이블과 tweets 테이블이 있다면,
usersテーブル
nameカラム
tweetsテーブル
textカラム
association
user has_many tweets
tweet belongs_to user
이런 식의 테이블을 상정합니다.
코드는
User.all.map{ |user| [user.name, user.tweets.pluck(:text)] }.to_h.to_json
네, 이것뿐입니다.
순서를 따라 갑시다.
① 해시하고 싶지만 map을 잡아 버린다
User.all.map{ |user| ~~ }
루비계의 JSON이라고 하면 해시군요? 왠지 확실히 닮아 있고 해시라면 JSON에 곧바로 변환할 수 있을 것 같네요.
하지만 루비는 블록 내에서 처리를 하고 결과 해시를 돌려주는 것 같은 편리한 메소드에 나는 아직 만나지 않았습니다.
그래서 먼저 map을 사용하여 배열을 생성합니다.
②[키, 값]의 순서로 취득한다
User.all.map{ |user| [user.name, user.tweets.pluck(:text)] }
map으로 취득하는 배열은 [키, 값]의 순서로 취득합니다.
이번은 아래와 같은 형태이므로,
{"제이슨": ["why", "japanese", "people"]}
배열의 1번째에 유저명, 2번째에 pluck 해 text 정보의 배열을 취득하고 있습니다.
③배열을 해시로
User.all.map{ |user| [user.name, user.tweets.pluck(:text)] }.to_h
취득한 배열을 to_h 메소드로 해시로 변환합니다.
이 때, 배열이 이중 배열이면,
[
["ジェイソン": ["why", "japanese", "people"]],
["たろう": ["おはよう", "ありがとう"]]
].to_h
=>
{
"ジェイソン": ["why", "japanese", "people"],
"たろう": ["おはよう", "ありがとう"]
}
라는 형태로 변환해 줍니다. 편리하네요~.
④ 해시를 JSON으로
User.all.map{ |user| [user.name, user.tweets.pluck(:text)] }.to_h.to_json
해시에 대해 to_json 메소드를 사용하여 JSON으로 만듭니다. 해시와 JSON의 구조는 매우 닮아 있기 때문에 이미지는 간단하네요.
to_h 메소드를 사이에 두지 않고 to_json 메소드를 배열에 사용하면 키와 값의 관계가 잘 반영되지 않기 때문에,
일단 to_h 메소드를 끼우는 것이 간입니다.
끝
네, 어떨까요? 제대로 JSON으로 변환할 수 있었습니까?
이런 마도로 이런 일 하지 않아도 더 쉬운 방법이 있어! 라는 분, 코멘트 기다리고 있습니다! 그럼!
Reference
이 문제에 관하여(ActiveRecord::Relation을 map으로 짜내 두꺼운 JSON으로 변환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/YuitoSato/items/8d1ebf5ca2281b9b03cd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
{
"ジェイソン": ["why", "japanese", "people"],
"たろう": ["おはよう", "ありがとう"]
}
usersテーブル
nameカラム
tweetsテーブル
textカラム
association
user has_many tweets
tweet belongs_to user
User.all.map{ |user| [user.name, user.tweets.pluck(:text)] }.to_h.to_json
네, 이것뿐입니다.
순서를 따라 갑시다.
① 해시하고 싶지만 map을 잡아 버린다
User.all.map{ |user| ~~ }
루비계의 JSON이라고 하면 해시군요? 왠지 확실히 닮아 있고 해시라면 JSON에 곧바로 변환할 수 있을 것 같네요.
하지만 루비는 블록 내에서 처리를 하고 결과 해시를 돌려주는 것 같은 편리한 메소드에 나는 아직 만나지 않았습니다.
그래서 먼저 map을 사용하여 배열을 생성합니다.
②[키, 값]의 순서로 취득한다
User.all.map{ |user| [user.name, user.tweets.pluck(:text)] }
map으로 취득하는 배열은 [키, 값]의 순서로 취득합니다.
이번은 아래와 같은 형태이므로,
{"제이슨": ["why", "japanese", "people"]}
배열의 1번째에 유저명, 2번째에 pluck 해 text 정보의 배열을 취득하고 있습니다.
③배열을 해시로
User.all.map{ |user| [user.name, user.tweets.pluck(:text)] }.to_h
취득한 배열을 to_h 메소드로 해시로 변환합니다.
이 때, 배열이 이중 배열이면,
[
["ジェイソン": ["why", "japanese", "people"]],
["たろう": ["おはよう", "ありがとう"]]
].to_h
=>
{
"ジェイソン": ["why", "japanese", "people"],
"たろう": ["おはよう", "ありがとう"]
}
라는 형태로 변환해 줍니다. 편리하네요~.
④ 해시를 JSON으로
User.all.map{ |user| [user.name, user.tweets.pluck(:text)] }.to_h.to_json
해시에 대해 to_json 메소드를 사용하여 JSON으로 만듭니다. 해시와 JSON의 구조는 매우 닮아 있기 때문에 이미지는 간단하네요.
to_h 메소드를 사이에 두지 않고 to_json 메소드를 배열에 사용하면 키와 값의 관계가 잘 반영되지 않기 때문에,
일단 to_h 메소드를 끼우는 것이 간입니다.
끝
네, 어떨까요? 제대로 JSON으로 변환할 수 있었습니까?
이런 마도로 이런 일 하지 않아도 더 쉬운 방법이 있어! 라는 분, 코멘트 기다리고 있습니다! 그럼!
Reference
이 문제에 관하여(ActiveRecord::Relation을 map으로 짜내 두꺼운 JSON으로 변환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/YuitoSato/items/8d1ebf5ca2281b9b03cd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
User.all.map{ |user| ~~ }
User.all.map{ |user| [user.name, user.tweets.pluck(:text)] }
map으로 취득하는 배열은 [키, 값]의 순서로 취득합니다.
이번은 아래와 같은 형태이므로,
{"제이슨": ["why", "japanese", "people"]}
배열의 1번째에 유저명, 2번째에 pluck 해 text 정보의 배열을 취득하고 있습니다.
③배열을 해시로
User.all.map{ |user| [user.name, user.tweets.pluck(:text)] }.to_h
취득한 배열을 to_h 메소드로 해시로 변환합니다.
이 때, 배열이 이중 배열이면,
[
["ジェイソン": ["why", "japanese", "people"]],
["たろう": ["おはよう", "ありがとう"]]
].to_h
=>
{
"ジェイソン": ["why", "japanese", "people"],
"たろう": ["おはよう", "ありがとう"]
}
라는 형태로 변환해 줍니다. 편리하네요~.
④ 해시를 JSON으로
User.all.map{ |user| [user.name, user.tweets.pluck(:text)] }.to_h.to_json
해시에 대해 to_json 메소드를 사용하여 JSON으로 만듭니다. 해시와 JSON의 구조는 매우 닮아 있기 때문에 이미지는 간단하네요.
to_h 메소드를 사이에 두지 않고 to_json 메소드를 배열에 사용하면 키와 값의 관계가 잘 반영되지 않기 때문에,
일단 to_h 메소드를 끼우는 것이 간입니다.
끝
네, 어떨까요? 제대로 JSON으로 변환할 수 있었습니까?
이런 마도로 이런 일 하지 않아도 더 쉬운 방법이 있어! 라는 분, 코멘트 기다리고 있습니다! 그럼!
Reference
이 문제에 관하여(ActiveRecord::Relation을 map으로 짜내 두꺼운 JSON으로 변환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/YuitoSato/items/8d1ebf5ca2281b9b03cd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
User.all.map{ |user| [user.name, user.tweets.pluck(:text)] }.to_h
[
["ジェイソン": ["why", "japanese", "people"]],
["たろう": ["おはよう", "ありがとう"]]
].to_h
=>
{
"ジェイソン": ["why", "japanese", "people"],
"たろう": ["おはよう", "ありがとう"]
}
User.all.map{ |user| [user.name, user.tweets.pluck(:text)] }.to_h.to_json
해시에 대해 to_json 메소드를 사용하여 JSON으로 만듭니다. 해시와 JSON의 구조는 매우 닮아 있기 때문에 이미지는 간단하네요.
to_h 메소드를 사이에 두지 않고 to_json 메소드를 배열에 사용하면 키와 값의 관계가 잘 반영되지 않기 때문에,
일단 to_h 메소드를 끼우는 것이 간입니다.
끝
네, 어떨까요? 제대로 JSON으로 변환할 수 있었습니까?
이런 마도로 이런 일 하지 않아도 더 쉬운 방법이 있어! 라는 분, 코멘트 기다리고 있습니다! 그럼!
Reference
이 문제에 관하여(ActiveRecord::Relation을 map으로 짜내 두꺼운 JSON으로 변환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/YuitoSato/items/8d1ebf5ca2281b9b03cd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(ActiveRecord::Relation을 map으로 짜내 두꺼운 JSON으로 변환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/YuitoSato/items/8d1ebf5ca2281b9b03cd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)