programing

render : json = > 'string here' 결과 예상

codeshow 2023. 4. 2. 11:42
반응형

render : json = > 'string here' 결과 예상

천 번은 해봤지만 아직도 불편해요render :json는 문자열을 처리합니다.

범위를 설정하려면 레일 3에 대해 설명하겠습니다.

현재 동작은 다음과 같습니다.

...
render :json => 'This is the string'
...

브라우저로 돌아갑니다.

This is the string

이것은 실제로는 유효한 JSON 응답이 아닙니다.s

이상적으로는 다음과 같이 렌더링해야 합니다.

"This is the string"

레일 가이드조차 다음과 같이 말합니다.

렌더링하는 오브젝트에 대해 to_json을 호출할 필요는 없습니다.:json 옵션을 사용하면 렌더가 자동으로 to_json을 호출합니다.

그리고 부르기"This is the string".to_json실제로 돌아오고 있다"\"This is the string\""역시나

"This is the string".to_json #=> "\"This is the string\""

내가 그렇게 틀렸나요?

처음에는 이것이 예상치 못한 행동이라는 것에 동의하지만, 사실 어느 정도 말이 된다.

예를 들어, 다음과 같은 작업을 수행할 수 있습니다.

output = {'foo' => 'bar'}.to_json
render :json => output

이 경우에도to_json약간 중복된 결과입니다.{foo: "bar"}단, 그 결과는{'foo' => 'bar'}.to_json실제로는 문자열입니다.따라서 위의 코드 블록은 다음과 같습니다.

render :json => '{foo: "bar"}'

한다면render전달된 문자열을 JSON 부호화한다.:json, 을 얻을 수 있습니다."{foo: \"bar\"}"이것은, 전혀 예상외의 동작입니다.

그럼 이렇게 합시다.render체크하고,:json인수는 문자열입니다.이 경우 이 문자열은 JSON 문자열이며 이미 실행한 것으로 간주됩니다.to_json는 문자열을 전달합니다.그렇지 않으면 실행됩니다.to_json를 클릭합니다.

서류상으로는 분명히 할 수 있을 것 같습니다만, 여기 있습니다.언뜻 보기에는 직관적이지 않지만, 다른 방법으로 작동한다면 놀랄 것입니다.

언급URL : https://stackoverflow.com/questions/6878631/render-json-string-here-expected-result

반응형