0

我想将 SOQL 查询的结果作为 JSON 返回,但数据似乎是作为字符串返回的。

client = SFDC_Adapter.login
data = client.query("SELECT  MarkupAmount__c, 
                        MarkupPercent__c,
                        Product_Type_Id__c,
                        Product_Type__c 
                        FROM Product_Type__c 
                        WHERE Product_Type_Id__c = #{product_type_id}")
p data

=> [#<Product_Type__c:0x00000001c356f8 @Id=nil, @OwnerId=nil, @IsDeleted=nil, @Name=nil, @CreatedDate=nil, @CreatedById=nil, @LastModifiedDate=nil, @LastModifiedById=nil, @SystemModstamp=nil, @MarkupPercent__c=5.0, @Subscription__c=nil, @Product_Type__c="Research Trip", @MarkupAmount__c=nil, @Product_Type_Id__c=36.0>]

    puts data
=> #<Product_Type__c:0x00000001c356f8>

    puts data.to_json
=> ["#<Product_Type__c:0x00000001c356f8>"]

如何将这些结果具体化为 JSON 对象以在 Restful 服务中使用?

4

1 回答 1

0

我不知道那个宝石,但是从查看您的输出并查看您的结果来看,您似乎得到了一个Product_Type对象。

当您使用porputs时,inspect正在使用,通过在其上使用 HTML 编码,将实例转换为网页中可查看的内容。这就是您在输出中看到<和的原因。>

相反,您需要访问对象中的值。根据文档,您可以使用标准 getter 或使用hash[key]表单来执行此操作:

联系人 = Contact.find("contact_id") #=> #
contact = Contact.find_by_Name("John Smith") #=> 动态查找器!
contacts = Contact.all #=> 一个 Databasedotcom::Contact 实例的集合
contacts = Contact.find_all_by_Company("IBM") #=> 一个 Databasedotcom::Collection of matching Contacts
contact.Name #=> 联系人的姓名属性
联系人[“姓名”] #=> 相同的东西
contact.Name = "new name" #=> 更改联系人的 Name 属性,在内存中
联系人[“名称”] =“新名称”#=>相同的东西
contact.save #=> 将更改保存到数据库
contact.update_attributes "名称" => "新名称",
  "Phone" => "4156543210" #=> 一次更改多个属性并保存
contact.delete #=> 从数据库中删除联系人

尝试data['Product_Type_Id'],你应该得到36.0. 做同样事情的另一种方法是data.Product_Type_Id.

一旦确定了访问器,就可以使用简单的散列或散列数组生成 JSON。这将生成一个哈希:

require 'json'

hash = {
    'Id'               => data.Id,
    'OwnerId'          => data.OwnerId,
    'IsDeleted'        => data.IsDeleted,
    'Name'             => data.Name,
    'CreatedDate'      => data.CreatedDate,
    'CreatedById'      => data.CreatedById,
    'LastModifiedDate' => data.LastModifiedDate,
    'LastModifiedById' => data.LastModifiedById,
    'SystemModstamp'   => data.SystemModstamp,
    'MarkupPercent'    => data.MarkupPercent,
    'Subscription'     => data.Subscription,
    'Product_Type'     => data.Product_Type,
    'MarkupAmount'     => data.MarkupAmount,
    'Product_Type_Id'  => data.Product_Type_Id,
  }

puts hash.to_json

我没有看到一个to_hto_hash方法会是一个捷径。

于 2012-12-10T15:31:45.953 回答