Как исправить строку JSON в ответе в сущности Grape

#ruby-on-rails #json #grape #grape-entity

#ruby-on-rails #json #ruby-grape #grape-сущность

Вопрос:

Я пытаюсь предоставить столбец, который сохраняется в БД в виде строки JSON. Но он отображался как просто строка. Любая помощь будет оценена.

Пример сущности:

   class Entity < Grape::Entity
    expose :id
    expose :name
    expose :credentials # this is json string
  end
 

Фактический ответ:

 [
    {
        "id": 1,
        "name": "Foo",
        "credentials": "[{"name":"key","label":"Key"},{"name":"key2","label":"Key2"}]"
    }
]
 

Ожидаемый ответ:

 [
    {
        "id": 1,
        "name": "Foo",
        "credentials": [
            {
                "name": "key",
                "label": "Key"
            },
            {
                "name": "key2",
                "label":"Key2"
            }
        ]
    }
]
 

Комментарии:

1. Похоже, что на самом actual response деле это только в формате json. Это escape-символы, которые пытаются ответить. Он будет печатать то, что вы ожидаете.

2. Спасибо за ваш комментарий! Вы правы! @Surya

Ответ №1:

Если credentials это строка, содержащая JSON, чтобы она отображалась как объект JSON (а не как строка) с помощью Grape, вы должны десериализовать ее:

 class Entity < Grape::Entity
  expose :id
  expose :name
  expose :credentials

  def credentials
    JSON.load object.credentials
  end
end