ERP解析外圍系統json數據格式

       外圍系統調用ERP的WebService接口,將數據以json格式傳到ERP,ERP解析jsonjava

   一、建立java source jsp,提供java方法解析json數據    node

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 sql

          將json.jar上傳到ERP數據庫服務器JAVA_TOP下數據庫

          在數據庫服務器上,切換到JAVA_TOP目錄下執行loadjava -r -f -u apps/apps@172.16.100.179:1533/TEST json.ja 導入json.jar json

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

  

 

二、建立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

三、解析json數據後進行處理oracle

    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;
相關文章
相關標籤/搜索