外围系统调用ERP的WebService接口,将数据以json格式传到ERP,ERP解析json

1、创建java source jsp,提供java方法解析json数据

create or replace and compile java source named APPS.JsonUtil as
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import oracle.sql.CLOB;
import java.sql.SQLException;
import java.lang.Integer;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Writer;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL; import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
public class JsonUtil{
//取json串单个节点值
public static String getValue(String jsonStr, String nodeName){
String nodeValue = "";
try{
if(jsonStr ==null||!jsonStr.startsWith("{")||!jsonStr.endsWith("}")){
nodeValue ="";
}else{
JSONObject obj=new JSONObject(jsonStr);
nodeValue =obj.getString(nodeName);
}
}catch(JSONException e){
nodeValue="";
}
return nodeValue; } //取json数组长度便于循环处理
public static Integer getArrayLength(String jsonArrayStr){
Integer length=0;
try {
if(jsonArrayStr==null||!jsonArrayStr.startsWith("[")||!jsonArrayStr.endsWith("]")){
length=0;
}else{
JSONArray jsonArr = new JSONArray(jsonArrayStr);
length=jsonArr.length();
}
} catch (JSONException e) {
length=0;
}
return length;
} //获取数组长度
public static String ClobToString(CLOB clob)throws SQLException, IOException { //CLOB clob = rs.getClob(1);
///String clobContent = clob.getSubString(1, (int) clob.length());
String reString = "";
Reader is = clob.getCharacterStream();// 得到流
BufferedReader br = new BufferedReader(is);
String s = br.readLine();
StringBuffer sb = new StringBuffer();
while (s != null) {// 执行循环将字符串全部取出付值给StringBuffer由StringBuffer转成STRING
sb.append(s);
s = br.readLine();
}
reString = sb.toString();
return reString;
} public static String getLabViewString(Integer i,CLOB clob)throws SQLException, IOException{ String LabViewStr = ClobToString(clob);//+","; String[] LabViewStr1 = LabViewStr.split("}");
String LabViewStr2 = LabViewStr1[i];
//Integer length = LabViewStr1.length; return LabViewStr2;
} public static Integer getLabViewInteger(CLOB clob)throws SQLException, IOException{ String LabViewStr = ClobToString(clob);//+","; String[] LabViewStr1 = LabViewStr.split("}");
Integer length = LabViewStr1.length; return length;
} //取json数组第index个元素
public static String getArrayValue(String jsonStr,Integer index){
String nodeValue="";
try {
if(jsonStr==null||!jsonStr.startsWith("[")||!jsonStr.endsWith("]")){
nodeValue="";
}else{
JSONArray jsonArr = new JSONArray(jsonStr);
nodeValue=jsonArr.getString(index);
}
} catch (JSONException e) {
nodeValue="";
}
return nodeValue;
} }

在oracle中编译时,可以会报错缺少相关的类,需要导入json.jar

将json.jar上传到ERP数据库服务器JAVA_TOP下

在数据库服务器上,切换到JAVA_TOP目录下执行loadjava -r -f -u apps/apps@172.16.100.179:1533/TEST json.ja 导入json.jar

查看是否导入成功  SELECT * FROM user_java_classes t WHERE 1 = 1  AND t.name LIKE '%json%'

  

2、创建jsp和oracle 数据类型关联映射关系

CREATE OR REPLACE PACKAGE BODY cux_json_commm_util AS
FUNCTION getval(jsonstr VARCHAR2, nodename VARCHAR2) RETURN VARCHAR2 AS
LANGUAGE JAVA NAME 'JsonUtil.getValue(java.lang.String,java.lang.String) return java.lang.String'; FUNCTION getarrval(jsonarraystr VARCHAR2, seqno NUMBER) RETURN VARCHAR2 AS
LANGUAGE JAVA NAME 'JsonUtil.getArrayValue(java.lang.String, java.lang.Integer) return java.lang.String'; FUNCTION getarrlen(jsonarraystr VARCHAR2) RETURN NUMBER AS
LANGUAGE JAVA NAME 'JsonUtil.getArrayLength(java.lang.String) return java.lang.Integer'; /* FUNCTION getLabViewString(jsonarraystr clob) RETURN NUMBER AS
LANGUAGE JAVA NAME 'JsonUtil.getArrayLength(java.lang.String) return java.lang.Integer';*/ FUNCTION getlabviewinteger(jsonclob CLOB) RETURN NUMBER AS
LANGUAGE JAVA NAME 'JsonUtil.getLabViewInteger(oracle.sql.CLOB) return java.lang.Integer'; FUNCTION getlabviewstring(i NUMBER, jsonclob CLOB) RETURN VARCHAR2 AS
LANGUAGE JAVA NAME 'JsonUtil.getLabViewString(java.lang.Integer,oracle.sql.CLOB) return java.lang.String'; END cux_json_commm_util;r

3、解析json数据后进行处理

    l_request_soap := p_request_soap;
--l_request_soap := '[{"YPBH":"TEST20191020","SYDATE":"2019-10-20?09:39:07","JCDATE":"2019-10-21","SYDCJ":"宁乡一车间","SYDGXDM":"火法一次配料","SYDWL":"1505053900001","YPLY":"实验组","JCDD":"麓谷","YPGG":"108R","ZZFE":"1","ZZMG":"2","ZZCU":"3","ZZNA":"4","ZZCA":"5","ZZNI":"6","ZZMN":"7","ZZTI":"8","ZZAL":"9","ZZZR":"10","ZZCR":"11","ZZZN":"12","ZZCO":"13","ZZSI":"14","ZZS":"15","ZZP":"1.0","ZZPB":"1.1","ZZW":"1.2","ZZY":"1.3","ZZSR":"1.4","ZZCD":"1.5","ZZNB":"1.6","ZZK":"1.7","ZZB":"1.711","ZZLA":"2.34","ZZCE":"22","ZZMO":"12","ZZF":"8","ZZBA":"1","ZZV":"1","ZZLI":"1","CXWZFE":"1","CXWZNI":"1","CXWZZN":"1","CXWZCR":"1","CXWZHL":"1","ZLLI":"5","ZLNI":"8","ZLMN":"7","ZLCO":"6.6","ZLAL":"3.5","ZLPCO":"3.8","ZLLIM":"0.11","ZLNIM":"0.11","ZLMNM":"0.12","ZLCOM":"0.13","ZLALM":"0.14","A1":"0.15","DZHTCU":"0.16","DZHTZN":"0.17","NXAL":"0.1","NXCR":"0.1","NXCU":"0.1","NXFE":"0.1","NXZN":"0.1","NXYSAS":"0.1","NXYSSB":"0.1","NXNAOH":"0.1","NXNH3":"0.1"}]'; --获取labview传过来多少条数据
l_length := cux_json_commm_util.getlabviewinteger(l_request_soap);
dbms_output.put_line('l_length:' || l_length);
FOR i IN 0 .. l_length - 2
LOOP
--获取从labview传过来的json字符串
l_return := cux_json_commm_util.getlabviewstring(i,
l_request_soap); --dbms_output.put_line('l_return111111:' || l_return);
--截取字符串,拼接成json格式{"name":"张三","age":"123"}
l_return := substr(l_return,
2,
length(l_return)) || '}';
dbms_output.put_line('json:' || l_return); --获取json数据指定元素的值
l_batch := cux_json_commm_util.getval(l_return,
'YPBH'); --批次
IF (l_batch IS NULL) THEN
dbms_output.put_line('获取批次错误!');
l_error_msg := l_error_msg || '获取批次错误,请检查json';
x_return_status := 'E';
x_msg_data := x_msg_data || l_error_msg;
continue;
END IF;
END LOOP;

ERP解析外围系统json数据格式的更多相关文章

  1. JS中将JSON的字符串解析成JSON数据格式《转》

    在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 使用eval函数来解析,并且使用jquery的ea ...

  2. JSON字符串解析成JSON数据格式

    在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 使用eval函数来解析,并且使用jquery的ea ...

  3. ERP通过JAVA流的形式将数据传到外围系统

    1.ERP封装数据成XML写入数据库服务器指定文件 --指定相关文件信息 v_file_path := '/u01/test/app/fs1/EBSapps/appl/cux/12.0.0/forms ...

  4. android 解析json数据格式(转)

    json数据格式解析我自己分为两种: 一种是普通的,一种是带有数组形式的: 普通形式的:服务器端返回的json数据格式如下: {"userbean":{"Uid" ...

  5. android 解析json数据格式

    json数据格式解析我自己分为两种: 一种是普通的,一种是带有数组形式的: 普通形式的:服务器端返回的json数据格式如下: {"userbean":{"Uid" ...

  6. C语言cJSON库的使用,解析json数据格式

    C语言cJSON库的使用,解析json数据格式 摘自:https://www.cnblogs.com/piaoyang/p/9274925.html 对于c语言来说是没有字典这样的结构的,所以对于解析 ...

  7. <转>android 解析json数据格式

    json数据格式解析我自己分为两种:一种是普通的,一种是带有数组形式的: 普通形式的:服务器端返回的json数据格式如下:{"userbean":{"Uid": ...

  8. fastJson解析复杂的json字符串,经测试已经成功解析

    要解析的json数据格式为: HTTP/1.1 200 OK Content-Type: text/jsv Content-Length: length { ResponseStatus: { }, ...

  9. 解析3级JSON的例子

    我们都知道现在Ajax盛行,而且前后台数据交流的格式已经换成了JSON了.虽然我对这种做法还是有点担忧的,如果用户关闭了JavaScript怎么办?但是这些担忧还是不能阻止Ajax的盛行和JSON数据 ...

随机推荐

  1. 多项式的各类计算(多项式的逆/开根/对数/exp/带余除法/多点求值)

    预备知识:FFT/NTT 多项式的逆 给定一个多项式 F(x)F(x)F(x),请求出一个多项式 G(x)G(x)G(x),满足 F(x)∗G(x)≡1(mod xn)F(x)*G(x) \equiv ...

  2. BZOJ 3309: DZY Loves Math 莫比乌斯反演+打表

    有一个神奇的技巧——打表 code: #include <bits/stdc++.h> #define N 10000007 #define ll long long #define se ...

  3. WinDbg常用命令系列---.write_cmd_hist (写命令历史记录)

    .write_cmd_hist 简介 .write_cmd_hist命令将调试器命令窗口的整个历史记录写入文件. 使用形式 .write_cmd_hist Filename 参数 Filename指定 ...

  4. 在触发器中使用{ITEM.LASTVALUE}时在首页问题栏信息显示不全

    在触发器中使用了系统宏变量,当条件满足时,如果这个宏代表的内容超过了20个字符,那么在首页信息就显示不全,会有一堆省略号 感谢https://blog.csdn.net/yu415907917/art ...

  5. JMeter学习1

    Jmeter的组织方式相对比较扁平,直接是TestPlan(相当于Project),TestPlan下创建的ThreadsGroup(相当于TestCase), Jmeter一个TestPlan也是一 ...

  6. CSS3 之书页阴影效果

    视觉如下: CSS3 之书页阴影效果: <html> <head> <meta charset="UTF-8"> <title>书页 ...

  7. 阿里云域名注册详解与Github绑定

    关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己. 本篇文章同步微信公众号 欢迎大家关注我的微信公众号:「醉翁猫咪」 今教一篇如何注册域名,拥有自己的域名是不是很爽呢?答案是是的,那 ...

  8. Painting The Fence(贪心+优先队列)

    Painting The Fence(贪心+优先队列) 题目大意:给 m 种数字,一共 n 个,从前往后填,相同的数字最多 k 个在一起,输出构造方案,没有则输出"-1". 解题思 ...

  9. 最大子段和(洛谷 P1115)

    题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入格式 第一行是一个正整数NNN,表示了序列的长度. 第二行包含NNN个绝对值不大于100001000010000的整数AiA_iA ...

  10. 菜鸟学IT之Hadoop综合大作业

    Hadoop综合大作业 作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3363 1.将爬虫大作业产生的csv文件上传到HDF ...