2010-06-09 6 views
1

배경 : 먼저 SendGrid를 사용하여 대량 이메일을 보내는 Ruby 앱을 작성하고 있습니다. SendGrid는 JSON 형식의 사용자 정의 전자 메일 헤더를 사용하여받는 사람, 대체 할 값 등을 설정합니다. SendGrid의 문서에서는 머리글을 1,000 바이트보다 짧게 분할하는 것이 좋습니다.Ruby에서 긴 JSON 문자열을 분할하십시오.

내 질문에 : 긴 JSON 문자열이 주어지면 단어를 중간에 배치하지 않고 줄을 적절한 위치 (예 : 쉼표 뒤)로 분할 할 수 있도록 줄에 어떻게 분할 할 수 있습니까? ?

이 아마 필요하지만, 여기에 내가 분할하고 싶은 문자열의 정렬의 예 : 당신이 제공 할 수있는 모든 도움을 사전에

X-SMTPAPI: {"sub": {"pet": ["dog", "cat"]}, "to": ["[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]com", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]"]} 

감사합니다!

답변

1

임의의 JSON을 분할하는 경우 분할 할 수있는 위치를 알 수 있도록 JSON을 구문 분석해야합니다. 이것은 토큰 사이뿐만 아니라 쉼표와 공백이 이름/값 내부에 나타날 수 있기 때문입니다. 그래서 먼저 문자열을 구문 분석 한 다음 JSON.pretty_generate과 같은 것을 사용하거나 필요에 따라 줄 바꿈을 추가하는 자체 생성 메서드를 작성하여 출력을 다시 생성합니다.

처리중인 JSON의 특수한 속성을 알고 있다면 그렇게하지 않아도됩니다. 특정 경우 예를 들어, 어떤 공백은 이름/값을 표시하지 않고 그 이름/값이 특정 최대 길이를 가지고,이

str = 'X-SMTPAPI: %s' % json.gsub(/(.{1,72})(+|$\n?)|(.{1,72})/,"\\1\\3\n") 

같은 정규 표현식을 사용할 수 있습니다 (I 여기에서 위를했다 : http://wiki.sendgrid.com/doku.php?id=smtpapiheader.rb)

그러나 이것은 토큰이 144자를 넘는 경우 (1,000이 한계 인 경우 72라는 이유를 모르는 이유), 공백이있는 경우 값의 중간에서 분할 될 수 있습니다 그것.

관련 문제