【问题标题】:Creating a list in json format创建 json 格式的列表
【发布时间】:2016-08-03 07:18:41
【问题描述】:

我想显示 JSON api 的“漂亮”格式。我大部分时间都在使用 Active Model Serializers。我了解到我可以使用 JSON.pretty_generate() 方法“美化”我的 JSON 显示。

我已经使用虚拟数据对其进行了测试,并且它在浏览器上运行:

def index
 #@users = User.all
 my_object = { :array => [1, 2, 3, { :sample => "hash"} ], :foo => "bar" }
 render json: JSON.pretty_generate(my_object)
end

本地主机:

#=> {
  "array": [
    1,
    2,
    3,
    {
      "sample": "hash"
    }
  ],
  "foo": "bar"
}

我的目标是在索引上显示用户信息列表。现在它没有缩进和换行符......好吧,它看起来并不漂亮:

用户控制器:

def index
     @users = User.all     
     render json: @users, each_serializer: UserSerializer, adapter: :json
UserSerializer)
   end

本地主机:

{"users":[{"id":1,"username":"Iggy1","items":[{"id":1,"list_id":1,"name":"Wash dishes","completed":true},{"id":7,"list_id":1,"name":"Finish this assignment","completed":false}],"lists":[{"id":1,"name":"Important!","user_id":1,"permission":"private"},{"id":8,"name":"Bloc's obligatory list number two","user_id":1,"permission":"private"},{"id":14,"name":"Mandatory list one","user_id":1,"permission":"private"},{"id":15,"name":null,"use...

经过多次试验和错误,我发现我需要将@users 作为 json 列表。证明 - 当我运行这个时:

用户控制器:

def index
  @users = User.all
  render json: JSON.pretty_generate(@users), each_serializer: UserSerializer
end

localhost (显示错误信息)

#=> only generation of JSON objects or arrays allowed

如何将JSON.pretty_generate() 应用于用户控制器索引上的User.all

【问题讨论】:

  • 我认为只渲染渲染json:@user.errors,状态::unprocessable_entity

标签: ruby-on-rails json active-model-serializers


【解决方案1】:

首先将@users 转换为to_json

def index
  @users = User.all
  render json: JSON.pretty_generate(@users.to_json), each_serializer: UserSerializer
end

【讨论】:

  • 仍然显示相同的错误:“只允许生成 JSON 对象或数组”使用上面的代码。如果我使用@users.to_a,它会显示 [“#<0x007fd749651058><0x007fd749650f18><0x007fd749650dd8><0x007fd749650c98>
【解决方案2】:

将哈希转换为json:

JSON.pretty_generate(@users.to_json)

【讨论】:

    【解决方案3】:

    您可以在json 中转换您的对象,例如:

       render json: JSON.pretty_generate(@users.as_json), each_serializer: UserSerializer
    

    希望对你有帮助。

    【讨论】:

    • 你是对的!我完全忘记了错误说“...JSOn objects or arrays”。不知何故,我在数组上空白。谢谢提醒!
    猜你喜欢
    • 1970-01-01
    • 2022-07-12
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多