【问题标题】:Rails Serialize: From YAML to JSON - Getting "unexpected token" errorRails 序列化:从 YAML 到 JSON - 出现“意外令牌”错误
【发布时间】:2014-10-10 20:53:23
【问题描述】:

我曾经使用以下代码将一组“朋友”ID(通过 Graph API 和 Omniauth 导入的 Facebook 用户 ID)保存到用户模型:

class User < ActiveRecord::Base
    ...
    serialize :friends


    def self.from_omniauth(auth)

    require 'net/http'
    require 'json'

    where(auth.slice(:provider, :uid, :email, :image)).first_or_initialize.tap do |user|
     user.provider = auth.provider
     user.uid = auth.uid
     user.oauth_token = auth.credentials.token

    friendsInfo = Net::HTTP.get(URI("https://graph.facebook.com/" + auth.uid + "/friends?fields=installed&access_token=" + user.oauth_token))
     unless friendsInfo == nil
       friendsData = (JSON.parse(friendsInfo))["data"]
       fArr = []
       friendsData.each do |fD|
        if fD["installed"] == true
         fArr.push(fD["id"])
        end
       end
     end

   user.friends = fArr

   user.save!

  end
end

此代码将同样安装了该应用的 Facebook 朋友的用户 ID 保存到一个数组中,即["3232344", "2342434", "8738453"]

但是,出于安全问题,我决定将 serialize :friends 更改为 serialize :friends, JSON,根据 CodeClimate's advice,但现在它要么:

a) 将其全部保存为一个 JSON 字符串(如果有多个“朋友”),或者

b) 如果只有一个“朋友”也安装了应用程序,则会给出 795: unexpected token at ''[user ID here]' - ---' 错误。

This answer 有一条评论询问如何在 Rails 4 中进行这项工作,所以我猜只是添加 JSON 在 Rails 3.1 中工作,但不再工作了?我尝试了to_jsonActiveSupport::JSON.decode 等的变体,并编写了custom serializer,但我的猜测是我的错误与在当前代码中创建数组后的序列化有关?回调是答案吗?

【问题讨论】:

    标签: ruby-on-rails json facebook serialization yaml


    【解决方案1】:

    我发现这个想法我认为它可以帮助Converting Serialized YAML to Serialized JSON in Rails models

    我没有看到您在哪里调用 YAML 或从您的代码中获取 YAML。

    但这是神奇的线YAML.load(medium.send(:attribute, :payload)).to_json

    希望对您有所帮助。

    【讨论】:

    • 谢谢你,但我最终做的是:friendsData = (ActiveSupport::JSON.decode(friendsInfo))["data"]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 2011-07-05
    相关资源
    最近更新 更多