Oracle 12102版本有一个新功能就是可以存储、查询、索引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
通过C#的adonet连接数据库,把查询结果序列化为json字符串,然后通过IO把json字符串写入本地的文本文件,在通过ftp把刚刚生成的文本文件上传到19216812/Test即可。
解决办法是在使用json_encode之前把字符用函数urlencode()处理一下,然后再json_encode,输出结果的时候在用函数urldecode()转回来。具体如下:
//urlencode处理function json_array($obj) {
foreach($obj as $key => $value) {
if(is_array($obj[$key])) {
$obj[$key] = json_array($obj[$key]);
}else{
$obj[$key] = urlencode($value);
}
}
return $obj;
}
//urldecode解密转换为中文字符
function _json($obj) {
return urldecode(json_encode(json_array($obj)));
}
echo _json($json);//$json为你要输出的json数组
此处递归调用是为了处理多维数组······
给你个思路吧,既然你能问出这种问题应该是有了思路就会自己做的人,就不帮你写代码了。
首先,你确定这个表的所有字段中没有二进制内容,如果没有的话,下面这个思路你可以试试,但是如果有的话估计就需要对二进制进行特别的处理了,如果你有的话再追问吧。
思路开始:
1如果你是对一张确定的表(提前已经知道表结构)进行这样的处理,那就查询出来一条记录,通过Mysql的字符串拼接函数CONCAT,按照JSON格式,慢慢的拼一个字符串,最后通过select这个字符串返回这个字符串就行了。
2如果之前你并不知道,这个表的结构,甚至你根本不知道自己要处理的是那张表,那么存储过程中你需要传递一个表名进来,然后查询information_schema数据库中的COLUMNS表,从而获得这个表的具体字段信息,以及各个字段的先后顺序(为后面拼接字符串使用),剩下的就跟1中描述的思路一样了。
虽然不知道你的用处是什么,不过,以我个人的经验,这种返回JSON的方式并不可取,这样会增加数据库的负担,理论上应该是将数据出来后自己在程序中拼接。
以上就是关于oracle存储过程解析JSON全部的内容,包括:oracle存储过程解析JSON、请教大神,如何在SQL SERVER下将查询结果转为Json格式上传到http://192.168.1.2/Test、PHP从Mysql查出来的数据转换成json格式中文乱码怎么解决等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)