【发布时间】:2014-08-19 15:53:43
【问题描述】:
我正在尝试编写将 json msgs 记录到数据库的应用程序。我得到的那部分。问题在于获取该 json。我无法从中获得价值。 我试图从 db 获取原始 msgs 并从中获取值(json gem 似乎不将其视为 json) 我试图通过 .to_json 解析它,但它似乎也不起作用。 Maby你知道如何得到它吗? 提前致谢
表:
mjl_pk bigserial
mjl_body text <- JSON is stored here
mjl_time timestamp
mjl_issuer varchar
mjl_status varchar
mjl_action varchar
mjl_object varchar
mjl_pat_id varchar
mjl_stu_id varchar
代码:
#Include config catalog, where jsonadds is
$LOAD_PATH << 'config'
#Requirements
require 'sinatra'
require 'active_record'
require 'json'
require 'jsonadds'
require 'RestClient'
#Class for db
class Mjl < ActiveRecord::Base
#table name
self.table_name = "msg_json_log"
#serialization
serialize :properties, JSON
#overwrite ActiveRecord id with "mjl_pk"
def self.primary_key
"mjl_pk"
end
end
#Get json msg and write it to db
post '/logger' do
content_type :json
#Check if msg is json
if JSON.is_json?(params[:data])
#insert data into db
msg = Mjl.create(:mjl_body => params[:data] ,:mjl_issuer => 'LOGGER', :mjl_action => 'test', :mjl_object =>'obj')
else
#else return error
puts "Not a JSON \n" + params[:data]
end
end
#Get json with id = params[:id]
get '/json/:id' do
content_type :json
#Get json from db
json_body = Mjl.where(mjl_pk: params[:id]).pluck(:mjl_body)
puts json_body
json_body = json_body.to_json
puts json_body
#Get 'patientData' from json
puts json_body['key']
puts json_body[0]['key']
end
输出:
{
"key": "I am a value",
"group": {
"key2": "Next value",
"key3": "Another one"
},
"val1": "Val"
}
["{\n \"key\": \"I am a value\",\n \"group\": {\n \"key2\": \"Next value\",\n \"key3\": \"Another one\"\n },\n \"val1\": \"Val\"\n}"]
key
<--empty value from 'puts json_body[0]['key']'
【问题讨论】:
-
您使用的是哪个数据库? PostgreSQL 9.3 有 JSON 数据类型,所以不需要序列化。
-
我正在使用 postgresql,我已经尝试过了。但似乎 activerecord 没有得到它。当我从数据库中获取它时,它返回空值。除非我做错了什么。 (我使用与上面相同的代码)
标签: ruby-on-rails ruby json sinatra-activerecord