JSON - 수정이 쉽거나 어렵습니까?

5942 단어
당신은 아마도 당신의 일에서 직면해야 할 많은 기술적 문제를 가지고 있을 것입니다. 그들 중 일부는 시간이 많이 걸리고 다른 일부는 빠르게 해결합니다. 때로는 이해하기 쉽고 잠재적으로 해결하기 쉬운 문제에 직면할 때도 있지만 결국에는 한 시간도 채 걸리지 않는 솔루션을 찾는 데 많은 시간이 소비되었음을 알 수 있습니다.

그렇다면… JSON을 수정하는 것은 어떻습니까? Ruby(& Rails)에서 쉬운가요 아니면 어려운가요?

내부에 HTML 조각이 있는 간단한 구조가 있다고 가정해 보겠습니다.

{
  "a": {
    "b": [
      {
        "c": "<span id=\"head\"></span>"
      },
      {
        "d": "<span id=\"body\"></span>"
      }
    ],
    "e": "#ffffff"
  },
  "f": "<span id=\"footer\"></span>",
  "g": 123
}


다음과 같은 변수 목록이 있습니다.

head = "Hey John!"
body = "I invite you to my Birthday party!"
footer = "Best regards."


우리의 목표는 해당 트리 내에서 특정 DOM 조각을 찾아 텍스트를 삽입하는 것입니다. 다른 값은 변경할 수 없습니다. 그래서 우리는 그런 것으로 끝낼 것입니다.

{
  "a": {
    "b": [
      {
        "c": "<span id=\"head\">Hey John!</span>"
      },
      {
        "d": "<span id=\"body\">I invite you to my Birthday party!</span>"
      }
    ],
    "e": "#ffffff"
  },
  "f": "<span id=\"footer\">Best regards.</span>",
  "g": 123
}


해결책은 아주 간단해 보입니다. 해시로 변환하고 nokogiri gem과 결합하여 deep_transform_values ​​메서드를 사용할 수 있습니다.

hash.deep_transform_values { |value|
  if value.is_a?(String)
    html = Nokogiri::HTML5.fragment(value)

    head_node = html.at_css("#head")
    body_node = html.at_css("#body")
    footer_node = html.at_css("#footer")

    head_node&.inner_html = head
    body_node&.inner_html = body
    footer_node&.inner_html = footer

    html.to_s
  else
    value
  end
}


… 그리고 그게 다야.

좋은 웹페이지 즐겨찾기