【问题标题】:Sending and receiving an array to a sql database via JSON通过 JSON 向 sql 数据库发送和接收数组
【发布时间】:2018-02-07 20:17:33
【问题描述】:

我将一个数组放入发送到 java webservice 的对象中(请参阅 javascript.js -> sendDataToWebservice())。 Web 服务处理数组(通过 gson)并将其作为字符串保存在 sql 数据库中(参见 webservice.java -> handleDataFunction())。当我想接收数组时,数据未正确转换回数组(请参阅 javascript.js -> receiveDataFromWebservice())。数据将被转换为这样的字符串,而不是数组:“[”item1”,”item2]”。

我需要解析数组吗?我认为问题是在两者之间的某个地方添加了引号,因此数据被识别为字符串而不是数组。

提前致谢!

javascript.js

var myArray = new Array();

function sendDataToWebservice() {
    // Create the JSON to send to the webservice
    var jsonData = {
        "action": actionName,
        "array": myArray
    };

    // Send the data
    $.ajax({
        url: "/xaction/",
        type: 'POST',
        data: JSON.stringify(jsonData),
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        async: true,
        success: function (msg) {
            // ...
        }
    });
}

function reveiveDataFromWebservice() {
    // Receive the data
    jQuery.getJSON("/webservice/getdata", function (returningData) {
        if (returningData.success) {
            array= returningData.array;
            }
    });

webservice.java

private void handleDataFunction(inputData) {
    // Create a map for the parameters
    MapSqlParameterSource namedParameters = new MapSqlParameterSource();
    // Create the query string
    String query = "my sql query";
    // Here I want to retrievethe array as a String to store it in the db
    JsonArray jsonArray = currentAntwortFeld.get("array").getAsJsonArray();
    // Add the array as an String to the sql parameters
    namedParameters.addValue("arraydbfield", jsonArray.toString())
    // Execute the sql query
    factory.executeUpdate(query, namedParameters);
}

【问题讨论】:

    标签: javascript java arrays json gson


    【解决方案1】:

    为了从 JSON 转换为 SQL,我实现如下:

     let jsArray = [1,2,3,4] //Example array in JS
     let sqlArray = '{';
     jsArray.forEach(element=>sqlArray+=element+',')
     sqlArray = sqlArray.substring(0, sqlArray.length-1) + '}'
    

    现在使用 sqlArray 适合 SQL。

    【讨论】:

      【解决方案2】:

      JSON.parse() 会将包含数组的字符串转换为数组对象。

      myArray = JSON.parse(myString)
      

      不知道为什么 jQuery 还没有为你做这件事。我认为这就是$.getJSON() 的意义所在。但是我不会用jQuery,所以我也不是很清楚。

      【讨论】:

      • 我尝试使用 myArray = JSON.parse(myString) 但我只得到一个 SyntaxError (Unexpected token o in JSON at position 1)
      • 这意味着您在服务器上生成的字符串是 javascript 数组的不正确表示。尝试在服务器端打印出来,寻找错误,希望能找出错误。一旦你发送了一个格式正确的数组字符串,jQuery 可能会为你做解析。我认为它正在生成一个字符串,因为这是它可以为您提供有效而不是抛出错误的唯一方法。
      猜你喜欢
      • 2012-03-02
      • 2023-04-04
      • 2015-07-07
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      • 2012-02-12
      • 2012-03-10
      • 1970-01-01
      相关资源
      最近更新 更多