我想将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服务中使用?
答案 0 :(得分:0)
我不知道那个gem,但是通过查看你的输出,并且看一下你的结果,看起来你得到了一个Product_Type
个对象。
当您使用p
或puts
时,正在使用inspect
,即通过在其上使用HTML编码将实例转换为可在网页中查看的内容。这就是您在输出中看到<
和>
的原因。
相反,您需要访问对象中的值。根据{{3}},您可以使用标准的getter或使用hash[key]
表单来执行此操作:
contact = Contact.find("contact_id") #=> # contact = Contact.find_by_Name("John Smith") #=> dynamic finders! contacts = Contact.all #=> a Databasedotcom::Collection of Contact instances contacts = Contact.find_all_by_Company("IBM") #=> a Databasedotcom::Collection of matching Contacts contact.Name #=> the contact's Name attribute contact["Name"] #=> same thing contact.Name = "new name" #=> change the contact's Name attribute, in memory contact["Name"] = "new name" #=> same thing contact.save #=> save the changes to the database contact.update_attributes "Name" => "newer name", "Phone" => "4156543210" #=> change several attributes at once and save them contact.delete #=> delete the contact from the database
尝试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_h
或to_hash
方法作为捷径。