『壹』 求一個資料庫函數解析json 如下圖要求
資料庫只是用來存儲數據的,為什麼橘搭不把處理數據的部分放在後台?
在這里你需要了解以下幾個知識點。
在sqlserver 中存儲json ,需要用字元串類型進行存儲,一般用nvarchar()或 varchar()進行存儲。
openJson:打開Json字元串
IsJson:判斷一個字元串圓稿拿是不是合法的Json格式。是返回1,否返回0,null返回null。
Json_Value:從Json字元串中提取值。
Json_Query:Json字元串中提取對象或數組。
Json_Modify:更新Json字元串中的屬性值,並返回更新的Json字元串
然敬渣後參考圖片的需求,獲取輸入key值中的value欄位可以得到如下sql語句。
從JSON中獲取輸入B的JSON對象
SELECT JSON_QUERY(json, CONCAT('$.',key)) INTO K_VAL;
從B的JSON對象中,獲取value欄位的值
SELECT JSON_VALUE(K_VAL, '$.value') INTO JSONVALUE;
最終我們的聲明的函數大概是:
CREATE FUNCTION PARSEJSON(json VARCHAR(2000), key VARCHAR(200))
RETURNS VARCHAR
BEGIN
declare JSONVALUE VARCHAR;
declare K_VAL VARCHAR;
SELECT JSON_QUERY(json, CONCAT('$.',key)) INTO K_VAL;
SELECT JSON_VALUE(K_VAL, '$.value') INTO JSONVALUE;
return JSONVALUE;
『貳』 Oracle資料庫中怎麼處理json字元串,本人小
Oracle 12.1.0.2版本有一個新功能就是可以存儲、查詢、索引JSON數據格式,而且也實現了使用SQL語句來解析JSON,非常方便。JSON數據在資料庫中以VARCHAR2, CLOB或者BLOB進行存儲。Oracle建議用戶在插入JSON數據之前,使用is_json來驗證輸入JSON數據的正確性。另外,Oracle也提供了相關的函數:
Functions:json_value, json_query, json_table.
Conditions:json_exists, is json, is not json, json_textcontains.
『叄』 db2 sql怎麼解析json
jsp頁面的數據轉換成json格式可以採用js來解析:
例如在ation中:
bookList = new ArrayList<Books>();
JSONObject json = new JSONObject();
json.accumulate("bookList", bookList);
json.accumulate("pageNum", pageNum);
json.accumulate("totalPages", totalPages);
json.accumulate("totalNum", totalNum);
jsonObj = json.toString();
『肆』 sql中json解析
你好!
withtas(select'a:[{f:,h:,checindate:''month1:,year:,day:'',checkoutdate:''month:,year:,day:'',},
{checindate:''month2:,year:,day:,'',checkoutdate:''month:,year:,day},
{checindate:''month3:,year:,day:,'',checkoutdate:''month:,year:,day}]'strfromal)
,t1as(SELECTsubstr(str,instr(str,'[')+1,instr(str,']')-instr(str,'[')-1)strFROMT)
,t2as(selectsubstr(str,instr(str,'{')+1,instr(str,'}')-instr(str,'{')-1)strfromt1)
selectstr,substr(str,instr(str,'checindate')+12,instr(str,'checkoutdate')-instr(str,'checindate')-12)fromt2;
得到第一個checindate,直接截取字元串就可以了
別搞得那麼復雜了
『伍』 SQL server存儲過程實現JSON數據解析,然後插入資料庫表求高手指點
兩種方式
1、SQL有個charindex 函數,可以用這個函數配合substr實現 split功能實現循環插入
2、sql 2008以上存儲過程支持表值參數,json反序列化在程序里更方便,所以反序列化之後通過表值參數傳遞
『陸』 求救,mysql怎麼解析json
DELIMITER $$ USE `dw`$$ DROP FUNCTION IF EXISTS `fn_Json_getKeyValue`$$ CREATE DEFINER=`data`@`%` FUNCTION `fn_Json_getKeyValue`( in_JsonArray VARCHAR(4096),#JSON數組字元串 in_Index TINYINT, #JSON對象序號,序號從1開始 in_KeyName VARCHAR(64)#鍵名 ) RETURNS VARCHAR(512) CHARSET utf8 BEGIN DECLARE vs_return VARCHAR(4096); DECLARE vs_JsonArray, vs_Json, vs_KeyName VARCHAR(4096); #declare vs_Json varchar(4096); DECLARE vi_pos1, vi_pos2 SMALLINT UNSIGNED; #寫監控日誌 #insert into dw.t_etl_log(sp_name, title, description) #values('dw.fn_Json_getKeyValue', '通過Json鍵名取鍵值', concat('in_JsonArray=', in_JsonArray)); SET vs_JsonArray = TRIM(in_JsonArray); SET vs_KeyName = TRIM(in_KeyName); IF vs_JsonArray = '' OR vs_JsonArray IS NULL OR vs_KeyName = '' OR vs_KeyName IS NULL OR in_Index 0 THEN #如果鍵名存在 SET vi_pos1 = vi_pos1 + CHAR_LENGTH(vs_KeyName); SET vi_pos2 = LOCATE(',', vs_json, vi_pos1); IF vi_pos2 = 0 THEN #最後一個元素沒有','分隔符,也沒有結束符'}' SET vi_pos2 = CHAR_LENGTH(vs_json) + 1; END IF; SET vs_return = REPLACE(MID(vs_json, vi_pos1, vi_pos2 - vi_pos1), '"', ''); END IF; END IF; END IF; RETURN(vs_return); END$$ DELIMITER ; 測試: {"old_current_score":"2","new_current_score":"0","old_grade_id":"1","new_grade_id":"1","grade_time":"2016-04-09 00:43:26","grade_upgrade_time":"2017-04-09 00:43:26"} select fn_Json_getKeyValue(reason,1,'old_grade_id')
『柒』 sql 處理 json
json的數據json.loads進來以後會變成一個json的對象,你需要自己把python對象中的欄位值取出來,拼成sql語句你可以把這個過程封裝成一個函數importjsondefsave_json(json_str):obj=json.loads(json_str)sql='insertintotblvalues("%s")'%obj['id']#這里注意編碼,要轉成資料庫的編碼格式#blabla
『捌』 java將json數據解析為sql語句
importjava.util.Iterator;
importjava.util.Set;
importjava.util.Map.Entry;
importcom.google.gson.JsonArray;
importcom.google.gson.JsonElement;
importcom.google.gson.JsonObject;
importcom.google.gson.JsonParser;
publicclassSql
{
publicstaticStringparseSQL(Stringjson)
{
JsonParserparser=newJsonParser();
JsonObjectobj=(JsonObject)parser.parse(json);;
Stringtable=obj.get("table").getAsString();
Stringop_type=obj.get("op_type").getAsString();
Stringsql="";
if("I".equals(op_type))
{
sql+="INSERTINTO"+table+"(";
JsonObjectafter=(JsonObject)obj.get("after");
Set<Entry<String,JsonElement>>entry=after.entrySet();
Iterator<Entry<String,JsonElement>>it=entry.iterator();
Stringvs="values(";
while(it.hasNext())
{
Entry<String,JsonElement>elem=it.next();
Stringkey=elem.getKey();
Stringval=elem.getValue().toString();
sql+=key+",";
vs+=val+",";
}
sql=sql.replaceAll(",\s*$","");
vs=vs.replaceAll(",\s*$","");
sql+=")"+vs+")";
}
elseif("U".equals(op_type))
{
sql+="UPDATE"+table+"SET";
JsonObjectafter=(JsonObject)obj.get("after");
Set<Entry<String,JsonElement>>entry=after.entrySet();
Iterator<Entry<String,JsonElement>>it=entry.iterator();
while(it.hasNext())
{
Entry<String,JsonElement>elem=it.next();
Stringkey=elem.getKey();
Stringval=elem.getValue().toString();
sql+=key+"="+val+",";
}
sql=sql.replaceAll(",\s*$","");
sql+="WHERE";
after=(JsonObject)obj.get("before");
entry=after.entrySet();
it=entry.iterator();
while(it.hasNext())
{
Entry<String,JsonElement>elem=it.next();
Stringkey=elem.getKey();
Stringval=elem.getValue().toString();
sql+=key+"="+val+"AND";
}
sql=sql.replaceAll("\s*AND\s*$","");
}
elseif("D".equals(op_type))
{
sql+="DELETEFROM"+table+"WHERE";
JsonObjectafter=(JsonObject)obj.get("before");
Set<Entry<String,JsonElement>>entry=after.entrySet();
Iterator<Entry<String,JsonElement>>it=entry.iterator();
while(it.hasNext())
{
Entry<String,JsonElement>elem=it.next();
Stringkey=elem.getKey();
Stringval=elem.getValue().toString();
sql+=key+"="+val+"AND";
}
sql=sql.replaceAll("\s*AND\s*$","");
}
returnsql;
}
publicstaticvoidmain(String[]args)
{
Stringinsert=
"{"table":"GG.TCUSTORD","op_type":"I","op_ts":"2013-06-0222:14:36.000000","current_ts":"2015-09-18T13:39:35.447000","pos":"00000000000000001444","tokens":{"R":"AADPkvAAEAAEqL2AAA"},"after":{"CUST_CODE":"WILL","ORDER_DATE":"1994-09-30:15:33:00","PRODUCT_CODE":"CAR","ORDER_ID":"144","PRODUCT_PRICE":17520.00,"PRODUCT_AMOUNT":3,"TRANSACTION_ID":"100"}}";
Stringupdate=
"{"table":"GG.TCUSTORD","op_type":"U","op_ts":"2013-06-0222:14:41.000000","current_ts":"2015-09-18T13:39:35.748000","pos":"00000000000000002891","tokens":{"L":"206080450","6":"9.0.80330","R":"AADPkvAAEAAEqLzAAC"},"before":{"CUST_CODE":"BILL","ORDER_DATE":"1995-12-31:15:00:00","PRODUCT_CODE":"CAR","ORDER_ID":"765","PRODUCT_PRICE":15000.00,"PRODUCT_AMOUNT":3,"TRANSACTION_ID":"100"},"after":{"CUST_CODE":"BILL","ORDER_DATE":"1995-12-31:15:00:00","PRODUCT_CODE":"CAR","ORDER_ID":"765","PRODUCT_PRICE":14000.00,"PRODUCT_AMOUNT":3,"TRANSCATION_ID":"100"}}";
Stringdelete=
"{"table":"GG.TCUSTORD","op_type":"D","op_ts":"2013-06-0222:14:41.000000","current_ts":"2015-09-18T13:39:35.766000","pos":"00000000000000004338","tokens":{"L":"206080450","6":"9.0.80330","R":"AADPkvAAEAAEqLzAAC"},"before":{"CUST_CODE":"DAVE","ORDER_DATE":"1993-11-03:07:51:35","PRODUCT_CODE":"PLANE","ORDER_ID":"600"}}";
System.out.println(parseSQL(insert));
System.out.println(parseSQL(update));
System.out.println(parseSQL(delete));
}
}
『玖』 sql server 2016怎麼解析json
--1 帶 Root Key
select * from sys_menu for JSON AUTO ,ROOT('Result')
--2 as
select ID,
Name,
Age as [Entity.Age],
Sex as [Entity.Sex]
from Student for json path
-- 3 輸出有null列的 sql
select * from sys_menu for JSON AUTO ,ROOT('SUSU'), include_null_values
--4解析json --OPENJSON(將JSON文件轉換為普通數據表)