【问题标题】:Converting Blob text to array/JSON object in Javascript在 Javascript 中将 Blob 文本转换为数组/JSON 对象
【发布时间】:2016-03-24 14:35:04
【问题描述】:

如何将 Blob 文本(从 Oracle DB 查询接收)转换为数组或 JSON 对象,以便我可以获得所需的项目值?

例如:

            var connection = new ActiveXObject("ADODB.Connection");          
            var connectionstring = "some conection string";
            connection.Open(connectionstring);
            var rs = new ActiveXObject("ADODB.Recordset");                   
            var queryString="Select COLUMNNAME from SOMETABLE where id=123456"   
            rs.Open(queryString, connection);                
            var val=rs.fields(0).value;

val 中,我得到了如下所示的单元格 blob 值

\[(\22transaction_id\22,variant \224937178\22);(\22deal_tracking_id\22,variant \224876812\22);(\22instrument_type\22,variant \22COMM-VT\22);(\22internal_portfolio\22,variant \22MA_STRUCTURED_BUY\22);(\22internal_contact\22,variant \22C19850\22);(\22transaction_status\22,variant \22Validated\22);(\22last_update_user\22,variant \22ENDUR_MGR02\22);(\22last_updated\22,variant 2015-11-25T02\3a32\3a00);(\22commodity\22,variant \22Natural Gas\22);(\22source_system\22,variant \22EndurGO\22);(\22input_date\22,variant 2015-10-06T00\3a00\3a00);(\22last_exercise_date\22,variant 2015-11-27T14\3a00\3a00);(\22product_type\22,variant 103)]

我想从上面的 blob 中获取“transaction_id”的值 如何在 Javascript 中将上述值转换​​为某种 Array 或 JSON 格式??

【问题讨论】:

    标签: javascript arrays json blob


    【解决方案1】:

    要得到这个:

    [{
      "transaction_id"     : "4937178",
      "deal_tracking_id"   : "4876812",
      "instrument_type"    : "COMM-VT",
      "internal_portfolio" : "MA_STRUCTURED_BUY",
      "internal_contact"   : "C19850",
      "transaction_status" : "Validated",
      "last_update_user"   : "ENDUR_MGR02",
      "last_updated"       : "2015-11-25T02:32:00",
      "commodity"          : "Natural Gas",
      "source_system"      : "EndurGO",
      "input_date"         : "2015-10-06T00:00:00",
      "last_exercise_date" : "2015-11-27T14:00:00",
      "product_type"       : "103"
    }]
    

    你必须:

    • 删除 ( val.replace('(','');
    • 删除 \22 val.replace('\22','');
    • ); 替换为 , val.replace(');',',');
    • ,variant 替换为 : val.replace(',variant',': ');
    • \3a 替换为 : val.replace('\3a',':'); (日期格式!)
    • [ 替换为 [{ val.replace('[','[{');
    • ] 替换为 }] val.replace(']','}]');

    为了获得有效的 JSON,所有值都应该是字符串类型(数字除外)。

    【讨论】:

    • 感谢您的回复。但是有没有其他方法或函数可以将 blob 整个值转换为数组/JSON??
    • 我猜你正在使用 ADOdb。如果是这样,您可以查看此响应:stackoverflow.com/questions/13556544/… JS 中的那种解析确实是个坏主意。
    【解决方案2】:

    transaction_id 的值是否应该是那里的变体编号?如variant \224937178\22);?

    假设您一直在寻找该变体编号并且您收到的回复的格式始终相同,您可以简单地在 Javascript 中使用 Regex 来提取 ID。

    var filter = /(\b[\w]{14}\b)\S,\b[\w]{7}\s\W(\d+)/.exec(val);
    if (filter === null) {
      console.log("There was an error, the Regex came up empty.");
    } else { 
        if (filter[1] === "transaction_id") {
        var transaction_id = filter[2];
        } else {
          var transaction_id = null;
        }
    }
    

    您可以运行下面的代码 sn-p 来查看将 HTML 输入到页面上的工作原理。

    var val = "\[(\22transaction_id\22,variant \224937178\22);(\22deal_tracking_id\22,variant \224876812\22);(\22instrument_type\22,variant \22COMM-VT\22);(\22internal_portfolio\22,variant \22MA_STRUCTURED_BUY\22);(\22internal_contact\22,variant \22C19850\22);(\22transaction_status\22,variant \22Validated\22);(\22last_update_user\22,variant \22ENDUR_MGR02\22);(\22last_updated\22,variant 2015-11-25T02\3a32\3a00);(\22commodity\22,variant \22Natural Gas\22);(\22source_system\22,variant \22EndurGO\22);(\22input_date\22,variant 2015-10-06T00\3a00\3a00);(\22last_exercise_date\22,variant 2015-11-27T14\3a00\3a00);(\22product_type\22,variant 103)]";
    
    var filter = /(\b[\w]{14}\b)\S,\b[\w]{7}\s\W(\d+)/.exec(val);
    if (filter === null) {
      $('#test').html("<p class='error'>Uh oh, the regex came up empty");
    } else {
      var transaction_id = filter[2];
      if (filter[1] === "transaction_id") {
        $('#test').html("<p class='success'>Transaction ID: " + transaction_id + "</p>");
      } else {
        $('#test').html("<p class='error'>Uh oh, there was no <b>transaction_id</b> present</p>");
      }
    }
    .error {
      background-color: red;
      color: #fff;
      font-weight: bold;
    }
    .success {
      background-color: lightgreen;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="test">
    
    </div>

    【讨论】:

      猜你喜欢
      • 2021-03-20
      • 2019-05-20
      • 2021-05-02
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      相关资源
      最近更新 更多