【问题标题】:Convert Java string array or JSON string to Javascript Array (Parse.com Cloud Code and Mandrill)将 Java 字符串数组或 JSON 字符串转换为 Javascript 数组(Parse.com Cloud Code 和 Mandrill)
【发布时间】:2014-08-31 11:18:52
【问题描述】:

我正在尝试在 Javascript 中创建一个数组(用于我的 Parse.com 云代码),这将使我能够将我从我的 java 应用程序传递的字符串数组中的每个字符串配对到一个名为“电子邮件”的键。这样,我可以将 Mandrill 的消息发送的“收件人”属性设置为多封电子邮件。

我函数的第一行,var recipientJavaArray = request.params.toEmail.split(","); 是我尝试将传入的 Java JSON 字符串(从 Java 字符串数组格式化)转换为 Javascript 字符串数组。

之后的 for 循环是我尝试创建一个新的二维数组,其中它们本质上是键值对:“email”=>“sample@gmail.com”

我在这个转换过程中做错了什么,它似乎没有工作?控制台日志仍然报告它已成功发送电子邮件以发送到 Mandrill 的服务器:

I2014-07-10T06:34:40.618Z] v8:运行云函数 sendEmail 与: 输入:{"fromEmail":"k*****@gmail.com","toEmail":"[\"k*****@gmail.com\",\"a****** *****@gmail.com\"]","text":"示例测试文本","fromName":"示例测试名称","toName":"示例收件人姓名","主题":"测试5"} 结果:电子邮件已发送!

这是我传入的 JSON 字符串的 Java 代码,以及我如何将字符串数组转换为 JSON 字符串。也许我在这里做错了什么?

Gson converter = new Gson();
String recipientsInJson = converter.toJson(recipients);

params.put("toEmail", recipientsInJson);

完整的 Javascript 函数如下,用于上下文:

Parse.Cloud.define("sendEmail", function(request, response) {
var recipientJavaArray = request.params.toEmail.split(",");
var recipientArray = new Array();
for (var i = 0; i < recipientJavaArray.length; i++) {
    var oneRecipient = new Array();
    oneRecipient["email"] = recipientJavaArray[i];
    recipientArray.push(oneRecipient);
}

var Mandrill = require('mandrill');
Mandrill.initialize('1C7****************OQ');
Mandrill.sendEmail({
    message: {
        text: request.params.text,
        subject: request.params.subject,
        from_email: request.params.fromEmail,
        from_name: request.params.fromName,

        /*THIS is what I am trying to get to work. It is an array struct.*/
        to: recipientArray
    },
    async: true
},{
    success: function(httpResponse) {
        console.log(httpResponse);
        response.success("Email sent!");
    },
    error: function(httpResponse) {
        console.error(httpResponse);
        response.error("Uh oh, something went wrong");
    }
}); });

关于 Mandrill 中的“to”参数到底是什么以及它是由什么组成的文档,可以在这里找到: https://mandrillapp.com/api/docs/messages.html

也许有比我目前尝试做的更好的方法来做到这一点?就像用 Java 中的数组(或 HashMap?)中的“email”键匹配电子邮件字符串并将其带到 Javascript 并将其转换回标准 Javascript 数组?这甚至可能吗?如果是这样,我该怎么做? 任何帮助将不胜感激。

【问题讨论】:

    标签: java javascript arrays json mandrill


    【解决方案1】:

    我终于自己想通了。事实证明,传入的 JSON 字符串需要被 JSON 解析才能正确格式化为 Javascript 数组。这就是我所做的:

    var recipientJavaArray = request.params.toEmail;
    var recipientArray = JSON.parse(recipientJavaArray);
    

    然后我在尝试创建具有键-> 值结构的二维数组时是错误的。我发现 Javascript 中的数组不支持键 - 那是 Javascript 中的对象。所以我改了for循环来创建接收者Objects来存储在Array中,而不是Array中的数组。

    var recipients = [];
    for (var i = 0; i < recipientArray.length; i++) {
        var recipientObject = {};
        recipientObject["email"] = recipientArray[i];
        recipients.push(recipientObject);
    }
    

    我希望这对遇到类似问题的人有所帮助。以下是完整、正确的函数,供其他人将来参考和方便:

    Parse.Cloud.define("sendEmail", function(request, response) {
    var recipientJavaArray = request.params.toEmail;
    var recipientArray = JSON.parse(recipientJavaArray);
    var recipients = [];
    for (var i = 0; i < recipientArray.length; i++) {
        var recipientObject = {};
        recipientObject["email"] = recipientArray[i];
        recipients.push(recipientObject);
    }
    
    var Mandrill = require('mandrill');
    Mandrill.initialize('1C7****************fOQ');
    Mandrill.sendEmail({
        message: {
            text: request.params.text,
            subject: request.params.subject,
            from_email: request.params.fromEmail,
            from_name: request.params.fromName,
            to: recipients
        },
        async: true
    },{
        success: function(httpResponse) {
            console.log(httpResponse);
            response.success("Email sent!");
        },
        error: function(httpResponse) {
            console.error(httpResponse);
            response.error("Uh oh, something went wrong");
        }
    });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多